BCB中如何将程序的界面设置成XP风格?

ZQGet 2004-07-02 09:57:57
BCB中的程序界面始终是原始的窗口界面,如何将其设置为XP风格的窗口界面?谢谢,最好能给出一个简单的例子。
...全文
808 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZQGet 2005-01-29
  • 打赏
  • 举报
回复
jishiping(JSP 季世平):你好!

在我整理我的程序库时也将你的 那个图标相关的函数加进去了,我这样做,主要是方便我以后写程序好用,不过我将我的程序库zqlib1.2全部放到的http://www.zccfamily.com/zqget/,有谁想使用的话可以自由下载,其中大部分的函数都在我的软件"windows 桌面主题1.4"中得到了测试,正确性有一定保证,当然
我不保证所有的函数都会完全正确
yezhitu 2005-01-28
  • 打赏
  • 举报
回复
SUIPACK好用啊。一直都在用他
nojave 2005-01-28
  • 打赏
  • 举报
回复
有种东西叫SUIPACK。。。。。。。。
jishiping 2005-01-28
  • 打赏
  • 举报
回复
没有用过XPMenu。不过楼上的写法,要不要 delete frmB; 这一行代码,取决于Form的OnClose事件中的Action的设定。如果Action已经被设为caFree,那么VCL就会自动删除Form,你就不能再调用delete删除了。在VCL中,Action的缺省值是这样的:如果是主窗口,那么Action为caFree,如果是MDIChild,那么为caMinimize,否则的话,Action的缺省值为caHide。也许XPMenu改变了这个缺省的设定吧(我没有用过XPMenu,只是猜测)。
ZQGet 2005-01-28
  • 打赏
  • 举报
回复
现在我的程序采用了xpMenu控件来实现xp风格,因为它是免费的,它非常好用,但
一些问题,我就遇到一个。如:

有两个窗体A和B都是用了xpmenu

如果在A窗体里使用如下语句创建B窗体时会出问题

frmB=new TFrmA(this);
frmB->ShowModal();
delete frmB;

会出错

linuxghs 2005-01-04
  • 打赏
  • 举报
回复
我可以作出来qq界面的效果
耙子 2004-10-22
  • 打赏
  • 举报
回复
闪电侠的文章是我写的 :)

不过BCB下有些问题,一个Jishiping 提到的TTreeView 会出错,还一个就是控件风格没有全都变了,比如TBitBtn 等等,会显得有些不伦不类。

所以无奈我换成Delphi 7,D7比D6变化不大,但是更好的对XP风格支持了。
真如实观 2004-10-22
  • 打赏
  • 举报
回复
在XP下的做法以weixing979(★★★闪电侠★★★) 提供的为好,我在vc下也是这样用的.
另外XPMenu是不行的.
真如实观 2004-10-22
  • 打赏
  • 举报
回复
suiPack可以,但是占用资源大一点.
constantine 2004-10-18
  • 打赏
  • 举报
回复
XPMENU不就可以了吗?添加后激活就可以了
ZQGet 2004-10-18
  • 打赏
  • 举报
回复
非常感谢大家的发言,我一直都想知道如何将程序设置为XP风格的界面,但你们所提出的解决办法都是要求此程序在XP下运行,如果不在XP下运行的话,界面就变了,所以我觉得为了使我的程序在不同的windows系统下都保持一致的风格,我只好比较麻烦地模拟xp的风格了,我主要是通过继承TCustom..的组件来完成,如果我真的实现的话,我很愿意与大家一起分享
类库 2004-10-18
  • 打赏
  • 举报
回复
XPMenu不叫XP风格吧
weixing979 2004-10-16
  • 打赏
  • 举报
回复
季老大的方法是可以的啊。或者看下下面的文章,方法基本差不多

windows xp 以下简称 win xp 或者 xp;
windows 2000 profressional + sp3以下简称 win2k pro
c++ builder 以下简称 bcb;
本文涉及到的delphi 都是delphi 6 + sp2,但不排除其他版本的delphi;
$(delphi) 定义为 delphi的安装目录;



前言

很多程序在window xp 里面的界面风格仍然是传统的风格。
很多人都采用了所谓xp风格控件,什么xpmenu等等,其实他们很多都是通过Skin技术来做到的,我本人不

喜欢过多地使用第三方控件,既然windows自身就是利用这些标准控件来做的,那么我们完全没必要过多

的用一些怪异的控件,因为我们可以通过修改思路来换作用标准控件实现自己需要的功能。
但为什么有一些程序却能变成xp风格,这是为什么?

这个关键在comctrl32.dll,他的名字因该是 Common Cortrols,公用控件库,如果大家在97年用过

delphi 3.0,会知道那个年代(97年)除了delphi和s3显卡的冲突还有就是不能在win95 OEM(所谓的win97)

中用delphi3,会报告Comctrl32.dll出错,需要拷贝一个其他版本替换,就是因为delphi中控件与

windows中的版本不符。

其实,大部分window开发工具提供的控件,都是封装了comctrl32.dll中的公用控件,还有一些自己额外

制作的控件,这样我们的开发程序就会随着comctrl32.dll的版本不同,出现不同的风格,win2k中提供的

是5.0,xp中在保留了5.0的同时还提供了新风格的6.0。
可以知道,我们的程序就是因为在winxp下仍然使用了传统风格的5.0,而没有使用新的6.0,如果用了6.0

那么凡是使用了comctrl32.dll中的控件部分都会变成xp的新风格了,下面我们要做的工作就是如何指定

程序使用新的6.0风格。


正文:

2个文件大家首先建立好,

(1) xpstyle.xml 文件内容如下(不包括 ---- 行)
------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="Pazee@21cn.com"
processorArchitecture="x86"
version="5.1.0.0"
type="win32"/>
<description>Windows Shell</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

------------------------------------------------------------------------------

(2) xpstyle.rc 文件内容如下(不包括 ---- 行,内容就一行)

------------------------------------------------------------------------------
1 24 xpstyle.xml
------------------------------------------------------------------------------


下面介绍2个方法;
外挂方式和直接在编译的时候增加对xp的风格支持;

1.叫做外挂可能不是非常恰当,反正你明白就行了。这个方法相对简单,而且对于很多没有源代码不能重

新编译或者不方便重新编译的可执行文件有效;

winxp 虽然内部版本号是nt 5.1 (win2000是nt 5.0),但是他一个特色就是大量的采用了xml。
下面拿delphi 自身开刀,把它变成一个xp风格的IDE(Delphi7提供一个第三方的工具可以做到这一点);

delphi 即使在win xp 下菜单和很多对话框的风格也都是传统的,下面我们改造他,拷贝xpstyle.xml 到

$(delphi)\bin 目录下,改名字为 delphi32.exe.manifest,然后你运行你的delphi ,你会发现他的风

格变成了xp的了。(你可以比较那些对话框的会明显的发现)。
看明白怎么改了吗?其实简单,就是把这个xml文件拷贝到你的可执行文件的相同目录下(或者在快捷方

式中,指定起始位置为这个xml的目录),然后给他改名字为xxxx.exe.manifest,其中 xxx.exe 就是你的

可执行文件的名字,如果此时在运行程序出错,那么你只能删掉这个xml了;
如果你搜索你的xp 系统,你会发现有很多.manifest 的文件,如果你好奇把他们删掉,你的xp就变成传

统风格了,包括大家常用的MS Messenger。


2.编译通过增加资源文件方式;
用过BC for windows 或者 Win32 SDK开发过程序的朋友一定对于RC文件非常熟悉,BC还曾经提供了

workshop来编辑资源。
了解资源文件格式的我就不多说了,不了解找一些资料自己看看吧,不了解这个资源文件,可以说你的

windows程序开发不算入门,
下面以delphi 开发程序为例子,(在 BCB 里面步骤基本相同)
打开你的程序,然后 菜单->project -> add to project 添加这个xpstyle.rc 文件,他会在工程文件里

面加一行
{$R 'WinXPStyle.res' 'WinXPStyle.rc'}

然后你再编译出来的文件在 win xp 下就是xp的新风格,经改改造的程序大家放心,在非xp环境里它仍是

传统风格。


补充说明:
1.delphi(BCB)都是采用的VCL都是封装了windows自身的标准控件,但是因为封装的差异,并不是所有的

控件都能变成新的xp风格,比如 TBitBtn 虽然从TButton继承,但是他就仍然是传统风格,我原来喜欢用

TBitBtn现在也都改为 TButton了;

2.曾经看过国外的文章,提到这个做法对于TListView会有些问题,说在使用TListView 如果ViewStyle

设置为 vsReport时,当你访问 TColumns 属性,会抛出一个Kernel错误,并说这个一个vcl与xp的兼容问

题。但是我在win2K pro + delphi 6 sp2里面并没有遇到这个错误;

3.很多第三方空间不能由于不是采用Windows 标准控件,不能改变风格,所以请大家至于检查界面的一致

性;

4.虽然程序的资源文件格式不是标准的格式,那么你的程序通过1方法仍然不能变成xp风格;

5.由于xp风格的窗口的Title(TForm.Caption 属性)区的高度比传统的要高,如果你的Form最下边留得空

隙不够大,那么你得Form会变得非常难看,或者出现一个讨厌的滚动条,相信很多人都有此经历;

6.对于第一种方式的扩展思考,我想对于.exe文件可以用办法1支持xp,那么同是PE格式的ocx或者dll文

件是否能通过增加xxx.ocx.manifest 来让他实现xp风格呢?这个我没有试验过,希望大家试试。
netying 2004-10-16
  • 打赏
  • 举报
回复
guanzhu
bugzhao 2004-10-16
  • 打赏
  • 举报
回复
顶下
关注ing
我来看看CB 2004-10-15
  • 打赏
  • 举报
回复
啊,还会出现问题,我现在就是这样用的,不过没用到TListView
jishiping 2004-10-15
  • 打赏
  • 举报
回复
如果程序中使用了TListView,那么使用XP界面后,程序就会有问题。
jishiping 2004-10-15
  • 打赏
  • 举报
回复
这是以前的别人的文章,转载一下。

WindowsXP的用户界面可谓华丽,但是用BCB编写的程序在XP下运行的时候并不能显示很好的效果,
只有标题栏有XP的界面,其他部分还是和Win2000下一样,这里将讲述如何应用WindowsXP的可视
化效果。

1.建立一个叫themed.manifest的文本文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
name="Your.Application.Name.Here"
processorArchitecture="x86"
version="1.0.0.0"
type="win32"/>
<description> WindowsXP Shell< /description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>


再加一点说明吧,name="Your.Application.Name.Here"应该是name="公司名.产品名.程序名";
version="1.0.0.0"应该是version="主版本号.次版本号.修正版本号.编译版本号";
<description> WindowsXP Shell</description> 应该是<description>你的程序描述</description>

2.再建立一个资源文件 就叫 XPStyle.RC吧!内容如下:
1 24 “themed.manifest"

3. 在你的工程中包含这个资源文件就可以了!在哪里包含?!@#$%^& 我倒!

注意:这只在WindowsXP下可以,在旧的操作系统上,外观不变!你就放心的加上吧!万一有人在XP下
运行你的程序呢?嗬嗬!
特招 2004-10-15
  • 打赏
  • 举报
回复
用SnPack.2.23,在www.ccrun.com网站有下载
xiaomatian 2004-10-15
  • 打赏
  • 举报
回复
suipack3.9就能实现啊。上网下载一个就好了
加载更多回复(4)

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧