关于“应用WinXP风格界面”的问题

jishiping 2003-04-25 06:13:18
创建一个文本格式的文件(假设名为xp.manifest),内容如下:

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<assembly xmlns ="urn:schemas-microsoft-com:asm.v1" manifestVersion = "1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="MS.WinXP.xp.exe"
type="win32"
/>
<description>WinXP</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

然后写一个资源文件(.rc文件),增加一个类型是24编号是1的资源:
1 24 "xp.manifest"

将这个资源文件(.rc文件)加入到Project中,这样编译后的程序,在WinXP下控件就有XP风格了。 但是我发现一个问题,如果Form上有TListView控件,并且ViewStyle=vsReport,那么每当窗口激活时,就会出现非法访问内存的问题。如果Form上没有TListView控件,或者TListView控件的属性ViewStyle不为vsReport,则没有问题。哪位知道如何解决这个问题?这里先谢谢大家。
...全文
27 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2003-05-14
  • 打赏
  • 举报
回复
来迟了!
sncel 2003-04-27
  • 打赏
  • 举报
回复
我用BCB6,Delphi7试了在XP下运行都没有问题。
jishiping 2003-04-27
  • 打赏
  • 举报
回复
我又看了一下,在.bpr文件里确实有XPStyle.res",但是Project1.cpp里没有
USERES("XPStyle.res"); 编译出来的程序里,确实没有类型为24、ID为1的资源。
myy 2003-04-27
  • 打赏
  • 举报
回复
J头:我发给你的工程怎么可能没有加 RC 呢?(下面是 .bpr的片段)
不过,我的工程确实是用“全编译”的,可能这才是关键吧。



....
<RESFILES value="Project1.res XPStyle.res"/>
......
<FILE FILENAME="XPStyle.RC" FORMNAME="" UNITNAME="XPStyle.RC" CONTAINERID="RCCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
........
jishiping 2003-04-27
  • 打赏
  • 举报
回复
看来是BCB5的BUG,BCB6已经修正这个BUG了。就此结贴。
jishiping 2003-04-27
  • 打赏
  • 举报
回复
已经知道BCB5与BCB6的不同了,上面的“现在也不清楚BCB5究竟有什么问题”应该去掉。
jishiping 2003-04-27
  • 打赏
  • 举报
回复
To myy and sncel(地狱情人-杨勇):
我一直还在用BCB5,刚才用BCB6试了一下,发现BCB6没有这个问题。现在也不清楚BCB5
究竟有什么问题。至于源程序comctrls.pas的TCustomListView.UpdateColumn函数,我看了
一下,BCB6里确实已经修正了这个错误。
procedure TCustomListView.UpdateColumn(AnIndex: Integer);
const IAlignment: array[Boolean, TAlignment] of LongInt =
((LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_CENTER),
(LVCFMT_RIGHT, LVCFMT_LEFT, LVCFMT_CENTER));
var
Column: TLVColumn;
AAlignment: TAlignment;
begin
if HandleAllocated then
with Column, Columns.Items[AnIndex] do
begin
mask := LVCF_TEXT or LVCF_FMT or LVCF_IMAGE;
iImage := FImageIndex;
pszText := PChar(Caption);
AAlignment := Alignment;
if Index <> 0 then
fmt := IAlignment[UseRightToLeftAlignment, AAlignment]
else fmt := LVCFMT_LEFT;
if FImageIndex <> -1 then
fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES
else //BCB6比BCB5多了这个else语句,FImageIndex==-1时,mask没有LVCF_IMAGE
mask := mask and not LVCF_IMAGE;
if WidthType > ColumnTextWidth then
begin
mask := mask or LVCF_WIDTH;
cx := FWidth;
ListView_SetColumn(Handle, Columns[AnIndex].FOrderTag, Column);
end
else begin
ListView_SetColumn(Handle, Columns[AnIndex].FOrderTag, Column);
if ViewStyle = vsList then
ListView_SetColumnWidth(Handle, -1, WidthType)
else if (ViewStyle = vsReport) and not OwnerData then
ListView_SetColumnWidth(Handle, Columns[AnIndex].FOrderTag, WidthType);
end;
end;
end;
xabcxyz 2003-04-26
  • 打赏
  • 举报
回复
学习,顺便接点分,呵呵。
Friecin 2003-04-26
  • 打赏
  • 举报
回复
为什么这么肯定?
iYoung 2003-04-26
  • 打赏
  • 举报
回复
现在的程序应用这个方法实现 XP 界面都会有一定的问题。等开发工具的发展吧。
Friecin 2003-04-26
  • 打赏
  • 举报
回复
我遇到了一个别的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

在应用XP风格以后,(编辑了xp.manifest,加入了.rc),我的ToolBar(Parent=CoolBar)上的TToolButton却工作不正常。
当鼠标放上去的时候,ToolButton可以浮起来,但是当鼠标点击的时候,ToolButton从效果上却不能按,并且将ToolButton->Style=tbsCheck时,无法相应事件?Why?
help!
Friecin 2003-04-26
  • 打赏
  • 举报
回复
我遇到了一个别的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

在应用XP风格以后,(编辑了xp.manifest,加入了.rc),我的ToolBar(Parent=CoolBar)上的TToolButton却工作不正常。
当鼠标放上去的时候,ToolButton可以浮起来,但是当鼠标点击的时候,ToolButton从效果上却不能按,并且将ToolButton->Style=tbsCheck时,无法相应事件?Why?
help!
jishiping 2003-04-26
  • 打赏
  • 举报
回复
顶一下。
jishiping 2003-04-26
  • 打赏
  • 举报
回复
我不想用其它控件(用其它控件可以做到不在WinXP下也有WinXP的风格),我现在只需要在
WinXP下有XP风格就可以了。但是有TListView控件,并且ViewStyle=vsReport,每当窗口激
活时,就会出现非法访问内存的问题。有谁能够解决这个问题?
jishiping 2003-04-26
  • 打赏
  • 举报
回复
现在还有问题。使用上面的方法,程序采用静态连接可以了。但是如果程序采用动态连接的
话,程序使用的还是Borland的DLL里的旧的TCustomListView的函数,程序仍然会出现非法访
问内存。
qibo999 2003-04-26
  • 打赏
  • 举报
回复
学习,接分.
jishiping 2003-04-26
  • 打赏
  • 举报
回复
To myy:
你的例子里,你忘了将 rc 文件加到 Project 中了,所以编译出来的程序根本没有 XP
风格的界面(主要是指Form上的控件)。我刚才试了一下 COKING(疯间猖越) 说的那个网页
上(http://www.cx66.com/cxgzs/program/delphi/911.htm)提供的方法,将comctrls.pas
拷贝到程序目录下,修改TCustomListView.UpdateColumn函数,然后将comctrls.pas加入到
Project 中,程序真的就没有问题了。但是缺点就是编译好的程序大小增加了200多KB。
myy 2003-04-26
  • 打赏
  • 举报
回复
我的TListView是两行两列的,不过没有关联ImageIndex.
myy 2003-04-26
  • 打赏
  • 举报
回复
J头,你的e-mail......
jishiping 2003-04-26
  • 打赏
  • 举报
回复
To myy:
刚才看了 COKING(疯间猖越) 说的那个帖子,可能是你的TListView中没有任何Item,
或者TListView中的每个Item的ImageIndex>=0。我用那篇文章的方法先试试看。
加载更多回复(14)
目录如下: 1 Win XP 键盘快捷键概述 2 Win XP中的网桥 3 Win98+Win2000+WinXP三操作系统共同使用安装实录 4 Windows XP安装问题解答精选 5 Windows XP传真功能详解 6 Windows XP的几个使用技巧 7 Windows XP的小秘密 8 Windows XP挂起到硬盘后的异常故障解决 9 Windows XP精彩答辩 10 Windows XP深入问答 11 Windows XP网桥功能初探 12 Windows XP硬件优化全功略 13 Windows XP优化指南 14 WINDOWS XP终极減肥大法 15 Windows XP主要问题以及解决方法一览 16 WindowsXP不能正常关机的解决之道 17 WINDOWSXP使用问题解答 18 WinXP安装参数 19 XP的常用操作及技巧 20 防范Windows XP的安全策略 21 辅助操作和特殊功能命令 22 高级技巧与应用. 23 搞定Windows XP鲜为人知的漏洞 24 隔离组件和并列共享 25 活用XP安全模式 26 xp实用技巧/加速篇 27 家庭用户内存优化指南 28 减肥加速 29 控制台命令详解 30 目录和文件操作命令 31 品味WinXP与众不同的文件管理 32 破解Windows XP中WPA的武器现身. 33 巧装大硬盘上XP 34 取消WinXP专业版中的保留的带宽 35 全面实战Windows XP防火墙 36 让你的Windows XP从此变得服服帖帖 37 如何打开注册表编辑器. 38 如何在WinXP下使用刻录机 39 扫描仪的安装和使用 40 设置自动关机重启时间. 41 深入了解Windows XP的刻录功能 42 慎用还原Wpa.dbl 43 升级到Windows XP应该考虑的6个方面. 44 手工恢复Windows XP的欢迎登录界面 45 双剑合璧 在Win XP下刻录音乐CD 46 微软提供的超级大餐 47 为Windows XP添加五笔输入法 48 系统和磁盘操作命令 49 消除WindowsXP中的复制乱码 50 硬件不兼容的处理. 51 运行菜单中的“快捷方式” 52 在Win XP中让QQ跑得更快 53 在Windows XP中制作屏保 54 制作具有Win XP 风格的菜单. 55 微软已经禁止盗版WinXP的更新功能 56 系统恢复 57 Windows XP使用小技巧几则 58 自己定义WinXP的时间校正服务器
WinXP使用技巧 1 Win XP 键盘快捷键概述 2 Win XP中的网桥 3 in98+Win2000+WinXP三操作系统共同使用安装实录 4 Windows XP安装问题解答精选 5 Windows XP传真功能详解 6 Windows XP的几个使用技巧 7 Windows XP的小秘密 8 Windows XP挂起到硬盘后的异常故障解决 9 Windows XP精彩答辩 10 Windows XP深入问答 11 Windows XP网桥功能初探 12 Windows XP硬件优化全功略 13 Windows XP优化指南 14 WINDOWS XP终极減肥xxxx 15 Windows XP主要问题以及解决方法一览 16 WindowsXP不能正常关机的解决之道 17 WINDOWSXP使用问题解答 18 WinXP安装参数 19 XP的常用操作及技巧 20 防范Windows XP的安全策略 21 辅助操作和特殊功能命令 22 高级技巧与应用. 23 搞定Windows XP鲜为人知的漏洞 24 隔离组件和并列共享 25 活用XP安全模式 26 xp实用技巧/加速篇 27 家庭用户内存优化指南 28 减肥加速 29 控制台命令详解 30 目录和文件操作命令 31 品味WinXP与众不同的文件管理 32 破解Windows XP中WPA的武器现身. 33 巧装大硬盘上XP 34 取消WinXP专业版中的保留的带宽 35 全面实战Windows XP防火墙 36 让你的Windows XP从此变得服服帖帖 37 如何打开注册表编辑器. 38 如何在WinXP下使用刻录机 39 扫描仪的安装和使用 40 设置自动关机重启时间. 41 深入了解Windows XP的刻录功能 42 慎用还原Wpa.dbl 43 升级到Windows XP应该考虑的6个方面. 44 手工恢复Windows XP的欢迎登录界面 45 双剑合璧 在Win XP下刻录音乐CD 46 微软提供的超级大餐 47 为Windows XP添加五笔输入法 48 系统和磁盘操作命令 49 消除WindowsXP中的复制乱码 50 硬件不兼容的处理. 51 运行菜单中的“快捷方式” 52 在Win XP中让QQ跑得更快 53 在Windows XP中制作屏保 54 制作具有Win XP 风格的菜单. 55 微软已经禁止盗版WinXP的更新功能 56 系统恢复 57 Windows XP使用小技巧几则 58 自己定义WinXP的时间校正服务器

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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