现在的位置: 首页 > 综合 > 正文

透明皮肤控件设计系列(五):透明控件

2013年10月04日 ⁄ 综合 ⁄ 共 613字 ⁄ 字号 评论关闭

现在我们有了透明窗口,那么所有控件也应该是透明的。

控件透明,原理其实很简单,就是把父控件的图像复制到自己上面即可。例如,常用的方法是给父控件发送背景重画的消息,同时把自己的DC传递过去:

SendMessage(Parent.Handle, WM_ERASEBKGND, DC, 0);
TCtrl(Parent).PaintControls(DC, nil);

这种方法对于非自己设计的皮肤窗口也有效,但缺点是会因为父窗口重画造成闪烁。

现在因为透明窗口也是我们自己制作的,所以方法就简单多了:根据自己的坐标位置,直接从图片拷贝即可。以CheckBox为例,代码段如下:

Buffer := TBitMap.Create;
Buffer.Width := Width;
Buffer.Height := Height;

//复制底部图片
Buffer.Canvas.Brush.Color:=Form1.m_BackColor;
Buffer.Canvas.FillRect(ClientRect);
Buffer.Canvas.CopyRect(ClientRect,Form1.m_BackBMP.Canvas,Rect(Left+xFramWidth,Top+xTitleHeight,Left+xFramWidth+Width,Top+xTitleHeight+Height));

效果如下:

详细代码点这里下载。

Pngimage for Delphi7点这里下载。

【上篇】
【下篇】

抱歉!评论已关闭.