透明皮肤控件设计系列(四):皮肤窗口完结篇

经过上面的几篇文章的介绍,相信大家已经会自己做一个透明皮肤窗口了,但是要记住,上文因为是基础教程,所以很多细节仍然是需要处理的,例如: 1、为了加快速度,实际上可以先用MakeBmp函数制作好皮肤图片,平均颜色就是取图片右下角的一个点即可。例如QQ的皮肤包就是这么干的。 2、如果实在想运行时计算,那么可以先将图片缩小,再计算平均颜色。这样一来,循环的次数就减少了,而效果是一样的。 3、为了美观,边框可以画个线条上去,这样一来立体感就强很多:   另外,还要其它一些细节,例如 Caption,如果平均颜色是黑色,那么字体应该自动换成白色。我在这里偷了个懒,直接使用了Blur算法,根据字 ...阅读更多

 阅读全文 分类:界面设计 12 Comments 2013-08-11

透明皮肤控件设计系列(三):皮肤窗口进阶篇

前文的窗口如果最大化,你会发现它把任务栏也覆盖了,原因是我们窗口的 BorderStyle 设置成了 bsNone,所以要处理一下WM_GETMINMAXINFO消息: procedure TForm1.WMGETMINMAXINFO(var Message: TMessage); var Rect: TRect; begin SystemParametersInfo(SPI_GETWORKAREA, 0, @Rect, 0); with PMINMAXINFO(Message.LParam)^ do begin //ptReserved: TPoint;//保留不用 ptMaxSize.X ...阅读更多

 阅读全文 分类:界面设计 12 Comments 2013-08-07

透明皮肤控件设计系列(二):皮肤窗口初级篇

Windows将窗口分为客户区和非客户区,例如对于标准的Windows窗口,标题栏和边框都属于非客户区,又称为NC区。对于客户区的绘制,应用程序会收到WM_PAINT消息,而非客户区,对应的消息是WM_NCPAINT。要实现皮肤窗口,需要三个步骤: 第一步:定义非客户区的大小。 要自定义非客户区的大小,程序就要响应WM_NCCALCSIZE消息。假设我们的标题高度为60(像素,下同),边框为10,那么对应的代码应该类似这样: const xTitleHeight: Integer = 50; //标题栏的高度 xFramWidth: Integer = 10; //左、右、下边框的厚度 pro ...阅读更多

 阅读全文 分类:界面设计 12 Comments 2013-08-05

透明皮肤控件设计系列(一):前言

Delphi的皮肤控件非常多,例如DynamicSkinForm等等。以前都是习惯直接使用第三方皮肤控件,后来在开发一个内部IM聊天工具的时候,发现没有现成的IM控件,网上有一些介绍模仿QQ界面的文章,但不成系列,重要的是都是“看起来像”,离”实际能使用”差的很远,于是自己开发了一个。老实说,因为以前都是依赖第三方控件,所以开始的时候发现困难很多。不过经过几个星期断断续续的学习,终于搞完了第一个界面库处女作,效果如下:     因为我是设计成设计期可见效果,下面是IDE设计期的效果(点击图片查看大图):   其中第一个控件面板分类就是该系列的控件。 本讲座将详细介 ...阅读更多

 阅读全文 分类:界面设计 21 Comments 2013-08-02

基于Delphi的Windows程序设计(一)

基于Delphi的Windows程序设计 前言 自1946年第一台电子计算机(以下简称“计算机”)诞生至今,已经过了半个多世纪。现在计算机已经融入人们的生活中,与人们的生活息息相关。不管是计算机硬件,还是计算机软件,都有了令人惊叹的发展。 计算机由两部分组成:硬件和软件。其中硬件就相当于人的躯体,而软件则相当于人的灵魂。计算机发展到今天,已经形成了一个庞大的体系,其中任何一个分支都足以耗尽一个人一生的精力。当然,今天运行在所有计算机设备上的软件,是全世界软件开发者共同的智慧结晶,不是微软一个人的功劳,更不是INTEL一个人的功劳,它是一个完整的体系,全世界共同耕耘几十年的成果,一步一个脚印,更 ...阅读更多

 阅读全文 分类:基础知识 11 Comments 2013-08-02

换个空间看看速度是否快一些

原来的太慢了。。。

 阅读全文 分类:未分类 11 Comments 2013-08-01


分类

链接

RSS