如何使单鼠标进入某按钮范围时自动改变按钮上面的图标(按钮的NumGlyphs=2以上)?(100分)

  • 主题发起人 主题发起人 czdd
  • 开始时间 开始时间
1. 自己继承TBitBtn做个按钮控件, 处理CM_MOUSEENTER, CM_MOUSELEAVE消息.
或者
2. 在application.OnMessage中处理, 判断如果是button并为mousemove消息则进行处理
 
简单的处理方法:
在mousemove里面就可以处理.
mousemove里面捕获的x,y是该控件的x,y
btw:
Another_eyes,我在等你回答我的问题,你却跑道这里来"偷油" :(
 
mousemove方法不行, 我早用过, 首先鼠标离开你不知道, 就算你设定个边界, 判断进入边界就算
离开的话, 实际应用中鼠标跑得稍微快一点就漏掉了. 不实用.
 
什么呀,那么简单,做和BUTTON上一样图标的光标(CUR),设置自定义CUR
在设置BUTTON.CURSOR属性不得了?

如果想用EYES的方法,那么还要画CURSOR//《DELPHI 2开发人员指南有例子》
不过那些例子,不知道为什么写那么长。
 
CJ兄,拜托看清楚了,是改按钮图标,不是Cursor
 
sorry,hhe
那就用eYes的方法吧
 
可能我没说清楚,我想做象管家婆、速达进销存软件的主界面一样的效果,单鼠标移
入按钮的区域,这个按钮上面的bmp就变成比较亮丽颜色的BMP或给BMP加上阴影,这两个BMP其实是在一个50*100的BMP文件里的两部分,用TransparentButton控件可以使鼠标进入时BMP从AUTOGRAY 变成彩色,但不能变成另一个BMP,这样的效果不好。
就算用MOUSEMOVE事件估计不行,还有一个速度问题,会闪烁,而且,很多按钮。
 
用CM_MOUSEENTER, CM_MOUSELEAVE(继承一个很容易的), 对有很多按钮正合适 :)
自己做控件还有个好处, 可以override paint过程, 用双缓冲刷新, 没闪烁问题了.
 
> 会闪烁,

试试在程序中将 BitBtn.DoubleBuffered 设定为True , 看看效果如何.
 
勿需双缓冲。MouseEnter或MouseLeave不会闪烁,而如果用MouseMove即使用100
缓冲也会闪烁。我有这样的一个控件。如果你要的话...
 
那些软件中用的是toolbutton一类的东西吧。这东西可是用了三个imagelist的,用不了多复杂,如果为做一个按钮都要写这么多代码,那等程序编完得多少年啊,不过
还是应该知道是如何做的。 :)
 
1。可以使用一些构件的说。

2。非常同意EYES的观点,用CM_MOUSEENTER,CM_MOUSELEAVE做非常简单。
但应当不用重写也可以捕获CM_MOUSEENTER,CM_MOUSELEAVE吧?

其实大部分可视OBJECT都应当支持MOUSEOVER,MOUSEOUT事件,如JAVASCRIPT
一样:-)
 
何不用成的AHM控件中的AHMIEBUTTON?
完了再看看源代码!
 
faint!
TransBtn 不是满足要求了?看它的EXAMPLE吧,支持最多四副位图,这是我最喜欢的构件之一
 
这也是我一直想要要的功能, 以前
我是用belevel & picture & label
组合实现的, 非常类似与OutLook按钮,
并有热点停留和更换文本颜色功能.
但我认为直接将相关VCL源程序复制
再修改为自己的元件最为彻底, 但当
Delphi升级时可能要重做.我也成功过,
可惜现在找不到源程序了, :(.
为什么它们都不提供MouseOver(Send:TObject;
IsEntry:Boolean)事件呢? //sigh
 
我是用TransBtn,这是我最喜欢的构件之一,可是怎样使鼠标进入范围时切换成
另外的位图呢?
而如果用MouseMove我想到了不会闪烁的办法:
if transbtn.picture<>B_picture then transbtn.picture.loadfromfile(B_picture)
Mousleave:
if transbtn.picture<>a_picture then transbtn.picture.loadfromfile(a_picture)
可是就算这样的方法能达到效果,我仍然觉得不好:必须把两个位图文件暴露
在用户面前(文件夹中);编程量太大,不划算(假如有100个按钮).
 
请问wjsgzy兄:哪里有AHM控件?
 
TToolBar.TToolButton
完全可以实现你的要求,设置
TToolBar.Images
TToolBar.HotImages
 

Similar threads

S
回复
0
查看
828
SUNSTONE的Delphi笔记
S
S
回复
0
查看
760
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部