透明皮肤控件设计系列(五):透明控件
2013-08-12 14:01
253 查看
现在我们有了透明窗口,那么所有控件也应该是透明的。
控件透明,原理其实很简单,就是把父控件的图像复制到自己上面即可。例如,常用的方法是给父控件发送背景重画的消息,同时把自己的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));
效果如下:
![](http://img.blog.csdn.net/20130812140030437)
详细代码点这里下载。
Pngimage for Delphi7点这里下载。
控件透明,原理其实很简单,就是把父控件的图像复制到自己上面即可。例如,常用的方法是给父控件发送背景重画的消息,同时把自己的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点这里下载。
相关文章推荐
- 透明皮肤控件设计系列(一):前言
- 透明皮肤控件设计系列(二):皮肤窗口初级篇
- 透明皮肤控件设计系列(三):皮肤窗口进阶篇
- 透明皮肤控件设计系列(四):皮肤窗口完结篇
- Delphi 仿QQ皮肤控件设计与运行效果图
- 为触屏手机而设计系列1——拇指操作的“热区/死角”与“控件尺寸”
- WP8.1学习系列(第十章)——中心控件Hub设计指南
- C#基础系列:开发自己的窗体设计器(实现控件的选择)
- 为触屏手机而设计系列1——拇指操作的“热区/死角”与“控件尺寸”
- QT 实现子控件的透明,可以实现主窗口设置背景皮肤
- C#基础系列:开发自己的窗体设计器(实现控件的选择)
- C#基础系列:开发自己的窗体设计器(在容器上拖动鼠标增加控件)
- C#基础系列:开发自己的窗体设计器(在容器上拖动鼠标增加控件)
- BBS 设计思路系列 ---- 抛弃多皮肤机制,只提供一套皮肤机制。
- C#基础系列:开发自己的窗体设计器(实现控件的拖动)
- 在应用了皮肤的程序中制作透明的文本编辑控件(如:TcxMemo)
- 为触屏手机而设计系列1—拇指操作的热区死角与控件尺寸
- FastReport控件系列写一个小小报表界面设计工具
- 【Visual Studio风格开发系列 - WinForm设计时异常】关于VS.NET中窗体设计器初始化控件引发的设计时异常
- C#基础系列:开发自己的窗体设计器(在容器上拖动鼠标增加控件)