修改XPMenu让ToolButton在Down=True时正确显示
2005-03-11 20:13
411 查看
XPMenu是一个不错的程序界面效果控件,但它也存在不少不足之处。我最近又对它作了一点修改。
原因是我在程序里有一个ToolButton,其Style=tbsButton,当Down=True时,XPMenu绘制的效果效果跟Down=False时一样,也就是说根本看不出它是按下的。当把Style改为tbsCheck后,却能显示效果,但是底色很深。
这个按钮来我是用来表示某个面板是否可以显示的,我希望它像OfficeXP的工具按钮那样,当工具条显示时,在按钮上画个边框即可,而不是以很深的底色显示。
XPMenu绘制工具栏按钮是由TXPMenu.ToolBarDrawButton函数完成,原型为如下:
在函数内由以下代码决定按钮是否显示边框,以及用什么颜色作底色:
它忽略掉了非cdsHot、非cdsChecked状态下按钮的Down=True的情况的处理。因此只要加上相应的判断,并让HasBorder=true即可达到我希望的效果。修改后代码如下:
原因是我在程序里有一个ToolButton,其Style=tbsButton,当Down=True时,XPMenu绘制的效果效果跟Down=False时一样,也就是说根本看不出它是按下的。当把Style改为tbsCheck后,却能显示效果,但是底色很深。
这个按钮来我是用来表示某个面板是否可以显示的,我希望它像OfficeXP的工具按钮那样,当工具条显示时,在按钮上画个边框即可,而不是以很深的底色显示。
XPMenu绘制工具栏按钮是由TXPMenu.ToolBarDrawButton函数完成,原型为如下:
procedure TXPMenu.ToolBarDrawButton(Sender: TToolBar; Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean); |
if (cdsHot in State) then begin if (cdsChecked in State) or (Button.Down) or (cdsSelected in State) then ACanvas.Brush.Color := FCheckedAreaSelectColor else ACanvas.brush.color := FBSelectColor; HasBorder := true; HasBkg := true; end; if ((cdsChecked in State) and not (cdsHot in State)) then begin ACanvas.Brush.Color := FCheckedAreaColor; HasBorder := true; HasBkg := true; end; if (cdsIndeterminate in State) and not (cdsHot in State) then begin ACanvas.Brush.Color := FBSelectColor; HasBkg := true; end; |
if (cdsHot in State) then begin if (cdsChecked in State) or (Button.Down) or (cdsSelected in State) then ACanvas.Brush.Color := FCheckedAreaSelectColor else ACanvas.brush.color := FBSelectColor; HasBorder := true; HasBkg := true; end; if ((cdsChecked in State) and not (cdsHot in State)) then begin ACanvas.Brush.Color := FCheckedAreaColor; HasBorder := true; HasBkg := true; end; {Modify: Conch 2005-3-10 在Down=true的按钮上画出边框} if (Button.Down) and not (cdsHot in State) then begin HasBorder := true; HasBkg := false; end; //Conch if (cdsIndeterminate in State) and not (cdsHot in State) then begin ACanvas.Brush.Color := FBSelectColor; HasBkg := true; end; |
相关文章推荐
- 修改XPMenu让ToolButton在Down=True时正确显示
- 修改 uploadify 以正确显示中文buttonText
- html文件修改后缀为aspx之后在ie6中格式显示不正确问题的解决办法
- html文件修改后缀为aspx之后在ie6中格式显示不正确问题的解决办法
- html文件修改后缀为aspx之后在ie6中格式显示不正确问题的解决办法
- 用date命令修改Linux系统的时间为什么无效?怎么才能正确显示
- 文档显示部件:用word查看方法在word中直接显示文档显示部件中的内容,并可以设置是否允许修改word内容。 True:不允许修改word内容;false:允许修改word内容。 实例应用:在窗体
- 解决Custom Field Type修改时属性显示不正确的问题
- 修改 uploadify 以正确显示中文buttonText
- html文件修改后缀为aspx之后在ie6中格式显示不正确问题的解决办法
- centos命令行连接正确显示中文
- 四.用户管理页面(显示所有的用户信息,同时为用户的添加,编辑,修改密码,删除,修改权限等功能提供相应的链接) UserMange.aspx
- 文件系统下,无法修改显示全部文件解决方法
- 我使用过的Linux命令之date - 显示、修改系统日期时间(转)
- mac/linux 修改vim显示信息
- 单片机显示时间,可以停止,修改分和时
- 待续。makefile关于文件修改时间确定是否需要重新编译的正确书写格式
- YII表单修改时显示原数据
- Ubuntu 10.04地址导航栏修改为显示路径
- VS2002中,无法显示进程。没有正确安装调试器。请运行安装程序安装或修复调试器。