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

2016-02-19 19:33 8 1 收藏

今天图老师小编要跟大家分享修改XPMenu让ToolButton在Down=True时正确显示,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】

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;

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

    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://www.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://www.tulaoshi.com/n/20160219/1621301.html

延伸阅读
标签: flash教程
实现方法就是在Apache Server配置文件(httpd.conf)中加入下面几句: ExpiresActive Onheader append cache-control:no-cacheheaderappend pragma: no-cacheheader append expires:-1 下面是个例子:http://www.oddhammer.com/tutorials/nocache/SWF_security.html 注意:这种方法只是让不显示在客...
procedure TForm1.Button1Click(Sender: TObject); begin     Webbrowser1.Navigate('about:blank'); end ; procedure  TForm1.Button2Click(Sender: TObject); var    V: OleVariant; begin    V := We...
标签: word
Word怎么显示修改痕迹   有时候修改文章的时候经常用到word的修订功能,就是将修改的痕迹记录下来,让人们就能知道文章哪里被修改了,是如何修改的。下面就来跟大家分享一下如何设定才能显示修改痕迹,以及如何设置不同的痕迹,做出最后的修改。 1、打开要修改的文档,在你修改以前,切换到审阅选项下,然后找到修订这个选项,点...
标签: 电脑入门
当在Excel制作的单元格中键入日期或时间时,它会以默认的日期和时间格式显示。默认的日期和时间基于在 Windows 控制面板中指定的区域日期和时间设置,并会随着这些设置的更改而更改。可以用几种其他日期和时间格式(其中大多数不受“控制面板”设置的影响)来显示数字。 1、选择要设置格式的单元格。 2、在“开始”选项卡上,单击“数字”旁边...
标签: 电脑入门
左键点击Windows 7时间栏,在弹出的窗口里点击更改日期和时间设置(下图红框)。 接着,切换到Internet 时间标签,点击更改设置,在弹出窗口服务器一栏里,删除默认的 time.windows.com,再输入一个新的服务器地址:pool.ntp.org,完成后点击立即更新。 更新后会显示上一次同步成功的时间,该服务器的自动同步频率为一周,相比Windows默...

经验教程

780

收藏

91
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部