文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发DelphiDelphi 完全时尚手册之 Visual Style 篇---使非标准 Win32 控件或自画控件也具有 Windows XP 的界面风格
精品推荐
特别推荐
·利用Delphi编写Socket通信程序
·拦截其它程序的网络数据封包
·Delphi编程根据IP地址得到主机名
·Delphi 程序员代码编写标准指南
·用DELPHI开发自动化服务器
·将日期转化为汉语的形式
·加密ACCESS数据库增加安全性
·使用TCP/IP协议实现聊天程序
·在Delphi中控制扫描仪
热点TOP10
·Delphi中DLL的创建和使用(1)
·用Delphi实现WinSocket高级应用
·利用Delphi编写Socket通信程序
·DBGrid使用全书(三)
·DELPHI多层分布式开发(2)
·实现关键字查找word文档里相匹配的内容
·实现高速文件拷贝
·用Delphi实现动态获取版本信息
·使用TCP/IP协议实现聊天程序
·在Delphi中控制扫描仪
·实现webbrowser中的打印、复制、全选等编辑功能
·拦截其它程序的网络数据封包
·Delphi下的ADO使用方法!
·DELPHI多层分布式开发(1)
·Delphi中利用钩子实现QQ聊天窗口的修改
·Delphi多层开发方案比较
·Delphi下“培养”自己的简单木马
·Delphi数据库控件使用入门
·Delphi的拨号连接类
·在Delphi中实现数据分析模块的动态报表

Delphi 完全时尚手册之 Visual Style 篇---使非标准 Win32 控件或自画控件也具有 Windows XP 的界面风格

日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]


Delphi 完全时尚手册之 Visual Style 篇

---使非标准 Win32 控件或自画控件也具有 Windows XP 的界面风格

    这里先说说两个概念:theme(主题)和 Visual Style 。Theme 最早出现在 Microsoft Plus! for Windows 95 中,是 Windows 中 Wallpaper、Cursors、Fonts、Sounds 、Icons 等的设置值集合。Visual Style 在 Windows XP 中才被引入,Visual Style 规定了 Contorls 的外观,另外还包括使用这些外观的一套 API 。使用 Visual Style 必须要 ComCtl32.dll 6,而 ComCtl32.dll 6 是不能被分发到以前版本的 Windows 中的,所以只能在 Windows XP 下使用 Visual Style。

    delphi 7 (后面简称 7 吧)对 Visual Style 提供了较好的支持。首先 7 将那个 Menifest 封装成了 VCL - TXPMenifest,另外增加了 UxTheme.pas 单元,里面是对 Visual Style 的一套 API 及其结构、常数等的引用声明(大概有 47 个API 函数),更重要的是 7 还增加一个 Themes.pas 单元,里面是对这套 API 的更进一步的简化和封装,7 下的 Win32 控件对 Visual Style 的支持较 Delphi 6有了很大改观,就是这个单元的功劳。

    一般来说要使 7 下编译的程序在 Windows XP 具有 Visual Style ,只需在主窗体上放入 VCL - TXPMenifest 即可,但对于一些非标准或是自画的控件,还是经典的界面。这里就说一下如何用 Themes.pas 中提供的方法使这些控件具有 Visual Style 。

    themes.pas 中只有一个类:TThemeServices 。这个类有一个重要的属性: ThemesEnabled (Boolean 类型),就是判断在当前程序能不能使用 Visual Style ,这个属性只有在程序使用了 TXPMenifest 并且在 Windows XP 下运行并且使用了 Windows XP 的主题(即桌面主题不是 Windows 经典)才为 True ,由于程序要运行在以前版本的 Windows 下,所以你的程序也得提供这个属性为 False 时的处理过程(一般就是原有的处理过程)。还要提一下这个类封装的几个重要函数:DrawEdge 用来画控件边界的,DrawElement 用来画整个界面的,DrawText 用来写字的。这个类还处理了 WM_THEMECHANGED 消息,这样当我们在改变桌面主题后,程序会自动调整外观。再说一下我们最常用到的一个函数(多态函数):GetElementDetails ,这个函数的返回值在上面的几个 DrawXXX 函数中要用到,这个函数的输入值是 24 个枚举类型中的元素,这 24 个枚举类型在 Themes.pas 单元开头定义(从第二个 TThemedButton 开始直到 TThemedWindow)。最后,我们不去直接使用这个类,在 Themes.pas 单元中有一函数:

function ThemeServices: TThemeServices;

返回值就是这个类,所以我们直接使用这个方法,7 的 VCL 里都是这样做。

    好,下面就来个简单的例子。delphi 的 TPanel 控件不是标准控件,我们就来在它上面实现一下 Visual Style 。在 Delphi 7 中新建一工程,在主窗体上放入 TXPMenifest ,在 Unit1 单元引用 Themes 单元,在

TForm1 = class(TForm)

前面加入下代码(主要是重载 TCustomPanel 的 Paint 方法):

TVSPanel = class(TCustomPanel)
private
  //
protected
  procedure Paint; override;
public
  //
end;

重载的 Paint 方法实现如下:

procedure TVSPanel.Paint;
var
  Details: TThemedElementDetails;
begin
  inherited;
  if ThemeServices.ThemesEnabled then
  begin
    Details := ThemeServices.GetElementDetails(tbPushButtonHot);   {这里画个按钮处于 Hot 状态下的样子}
    PerformEraseBackground(Self, Canvas.Handle);      {擦除画按钮时的背景}
    ThemeServices.DrawElement(Canvas.Handle, Details, ClientRect);
    ThemeServices.DrawText(Canvas.Handle, Details, Caption, ClientRect,
      DT_EXPANDTABS or DT_VCENTER or DT_CENTER or DT_SINGLELINE, 0);
  end;
end;


[1] [2] 下一页 




上一篇:Delphi 完全时尚手册之 CoolBar 篇---实现 CoolBar 的新特性 Chevron

下一篇:Delphi 消息机制引入的一个副作用

Delphi 完全时尚手册之 Visual Style 篇---使非标准 Win32 控件或自画控件也具有 Windows XP 的界面风格 相关文章:
·Windows Vista震撼1600X1200高清壁纸
·WindowsXP超级技巧
·红色警报2 完全秘技
·魔兽争霸3完全作弊码
·Windows XP的20个超级实用技巧大全
·最全面的WindowsXP修改大全
·神圣纪事详尽完全攻略
·让Windows XP系统快10倍
·Windows Vista Ultimate中文旗舰版下载+简单破解(支持迅雷HTTP & BT)
·破解windowsXP,window2000的开机密码
Delphi 完全时尚手册之 Visual Style 篇---使非标准 Win32 控件或自画控件也具有 Windows XP 的界面风格 相关软件:
·完全精通局域网手册(PDF)
·Windows主题70合一典藏版
·启动光盘制作完全手册(菜鸟先飞 图文教材系列)
·AutoCAD 2007傻瓜手册电子书
·FLASH 8中文使用手册
·Vista 主题完美风格包 V5.1
·瑞星杀毒软件2008下载版(完全免费)V20.36.32
·Windows 2003 Server 简体中文企业版(免激活)ISO
·创业完全手册
·侠盗猎车手5--圣安地列斯 完全正式破解版

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot