修改XPMenu让ToolButton在Down=True时正确显示

次牙咧嘴鬼拉西

次牙咧嘴鬼拉西

2016-02-19 19:33

今天图老师小编要跟大家分享修改XPMenu让ToolButton在Down=True时正确显示,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!
XPMenu是一个不错的程序界面效果控件,但它也存在不少不足之处。我最近又对它作了一点修改。
  原因是我在程序里有一个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;

  它忽略掉了非cdsHot、非cdsChecked状态下按钮的Down=True的情况的处理。因此只要加上相应的判断,并让HasBorder=true即可达到我希望的效果。修改后代码如下:
  
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;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  {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;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

修改XPMenu让ToolButton在Down=True时正确显示

编程语言 网络编程
修改XPMenu让ToolButton在Down=True时正确显示

让窗体在执行了“显示桌面”以后仍旧显示在桌面上

编程语言 网络编程
让窗体在执行了“显示桌面”以后仍旧显示在桌面上

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

让VB在程序中显示错误行

编程语言 网络编程
让VB在程序中显示错误行

在应用程序启动时显示 Abont 框

编程语言 网络编程
在应用程序启动时显示 Abont 框

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在分娩时孕妈妈该如何正确用力

分娩过程 分娩
在分娩时孕妈妈该如何正确用力

在分娩时孕妈妈该如何正确用力?

分娩 分娩过程
在分娩时孕妈妈该如何正确用力?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

实用技巧大放送办公软件WPS Office 2007

实用技巧大放送办公软件WPS Office 2007

内存主频越高越好吗

内存主频越高越好吗
下拉加载更多内容 ↓