奇怪,关于speedButton-------面条(50分)

  • 主题发起人 主题发起人 面条
  • 开始时间 开始时间

面条

Unregistered / Unconfirmed
GUEST, unregistred user!
我发现了个奇怪的问题:
一组SPEEDBUTTON,放在一个Image上,透明,Flat,
运行后,当鼠标快速在这些Button之间移动时,一些button失去焦点时
仍处于浮起状态。我把Image设为Enabled=false也不行。
 
这有什么? delphi自己的IDE有时候还会有这种情况呢.
谁让你"快速移动"了?
 
我移动的不快呀!
IDE中有这种情况吗?
 
别提SPEEDBUTTON,大三下学期做课程设计,就因为和你一样
的原因,在网上下载了一个IE风格的按钮,
谁知,嘻嘻,还是一样.
看来,cAkk言之有理:谁让你"快速移动"了?
哈哈.
 
不能全怪自己,也不能全怪delphi, 看看源程序吧:
procedure TSpeedButton.CMMouseEnter(var Message: TMessage);
begin
inherited;
{ Don't draw a border if DragMode <> dmAutomatic since this button is meant to
be used as a dock client. }
if FFlat and not FMouseInControl and Enabled and (DragMode <> dmAutomatic)
and (GetCapture = 0) then
begin
FMouseInControl := True;
Repaint;
end;
end;

procedure TSpeedButton.CMMouseLeave(var Message: TMessage);
begin
inherited;
if FFlat and FMouseInControl and Enabled and not FDragging then
begin
FMouseInControl := False;
Invalidate;
end;
end;

之所以浮不上来是因为mouseleave消息没及时响应,

 
同意AMO,不论是speedbtn or toolbtn在鼠标快速移动均有可能收不到mouseexit事件,
应该是消息。所以它不能实现重绘,重新将鼠标移进去再移出来就好了。
toolbarbutton97有时也有此问题不能怪DELPHI,因为IE中有时也会。
 
什么时候的问题了,怎么又浮上来了。

我也遇到过类似问题,但是,请注意,不知道我下列结论做的对不对:

一、如果SpeedButton简单的放在FORM上,这种几乎不出现。如果这组
BUTTON是放在其他的有PAINT能力的控件上,则很可能出现这问题。

我原来就是把SPEEDBUTTON放到了一个颜色板上了,当我把它拿开,就没
事了。

二、如果非要放在什么东西上面不可,可以尝试把SPEEDBUTTON那段代码
给COPY到本项目目录下,在PAINT的METHOD上(记得好象是),注释掉一
个BOOLEAN的变量(记不起来了),这样至少我用着就没事了。

我不认为AMO说的:WINDOW来不及响应的说法是对的。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
909
DelphiTeacher的专栏
D
D
回复
0
查看
704
DelphiTeacher的专栏
D
D
回复
0
查看
666
DelphiTeacher的专栏
D
D
回复
0
查看
661
DelphiTeacher的专栏
D
后退
顶部