Delephi工具栏上,当鼠标指向按钮时,出现一种新状态,离开时恢复原状态。这个功能怎么实现?

解决方案 »

  1.   

    设置TToolBar的Images、DisabledImages、HotImages属性。
    设置工具栏按钮的ImageIndex属性。
      

  2.   

    CustomDrawButton 下根据 TCustomDrawState来判断
      TCustomDrawState = set of (cdsSelected, cdsGrayed, cdsDisabled, cdsChecked,
        cdsFocused, cdsDefault, cdsHot, cdsMarked, cdsIndeterminate);
    根据状态不同,自己贴图或切换图
      

  3.   

    ToolBar上的按钮,可以按一楼的方法做,如果是普通按钮,可以在按钮的鼠标事件中自己动态搞定。利用onmousemove、onmousedown等事件,在里面对按钮进行处理(包括设置按钮的状态,添加不同图片等)
      

  4.   

    没有这两个事件啊。只有OnEnter和OnExit,也并不是那意思。用enabled属性可以让它响应,但我想要的是让按钮能探测到鼠标的临近和离开并变换形态;也就是Windows XP桌面属性对话框中“确定”“取消”按钮的响应一样。VB2008就有这样响应的按钮,我用的是Delphi 7,是不是不支持这项功能啊?也不会呀,有资料说Delphi本身就是Pascal语言开发的,它的工具栏上有的功能,它应该是可以做到的。
      

  5.   

    重新继承你要的button
    在private中添加
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;在这两个消息中促发事件,具体参照label的做法这样有时效果不是很好,有时无法促发,貌似测试也不知道啥原因,可能是CM_MOUSELEAVE类的消息促发问题,也可能是系统对鼠标的捕捉频率有关系。
    最好的做法是保存一个实例列表,以及一个当前鼠标所在实例的序号,然后在WM_MOUSEMOVE中判断。
      

  6.   

    Delphi2007有这两个事件,你用的delphi版本太低。