关于控件CM_MOUSELEAVE消息的问题(50分)

  • 主题发起人 主题发起人 okeyme
  • 开始时间 开始时间
O

okeyme

Unregistered / Unconfirmed
GUEST, unregistred user!
各位好,我有一个小小的问题,扩展TBitBtn圩TBitBtnEx增加了MouseLeave和MouseEnter事件,可是有个问题:
再应用程序中,TBitBtnEx1界面上添加的控件,有代码如下:
//MouseLeave事件中
begin
TBitBtnEx1.Caption := 'Leave';
end;

//MouseEnter事件中
begin
TBitBtnEx1.Caption :=' Enter';
end;
此诗可以看到效果,鼠标移入和移出时能看到caption改变的效果。

可是如果变成如下代码:
//MouseLeave事件中
begin
TBitBtnEx1.Caption := 'Leave';
SHowMessage('Leave');
end;

//MouseEnter事件中
begin
TBitBtnEx1.Caption := 'Enter';
SHowMessage('enter');
end;

就不行了,消息矿不停的弹出,很多次点击关闭(大概20次)后才关闭;

可是如果变成如下代码:
//MouseLeave事件中
begin
TBitBtnEx1.Caption := 'Leave';
SHowMessage('Leave');
end;

//MouseEnter事件中
begin
TBitBtnEx1.Caption := 'Enter';
// SHowMessage('enter');
end;
还是不行,,消息矿不停的弹出,很多次点击后才关闭;

最后如果变成如下代码:
//MouseLeave事件中
begin
TBitBtnEx1.Caption := 'Leave';
//SHowMessage('Leave');
end;

//MouseEnter事件中
begin
TBitBtnEx1.Caption := 'Enter';
SHowMessage('enter');
end;
则可以正常关闭消息矿,不知时什么原因,狂郁闷,求解答!
代码:


 
好玩啊[:D]
 
好好理解一下"MouseLeave",当leave时的事件,你leave了当然一直showmessage咯
 
需要结合SetCapture来使用,把鼠标消息锁定到当前窗口

//MouseLeave事件中
begin
TBitBtnEx1.Caption := 'Leave';
ReleaseCapture;
end;

//MouseEnter事件中
begin
TBitBtnEx1.Caption := 'Enter';
SetCapture(handle);
end;

 
当使用SHowMessage('Leave');时,自然要产生一个CM_MOUSELEAVE。
你这是死锁了
 

Similar threads

S
回复
0
查看
698
SUNSTONE的Delphi笔记
S
S
回复
0
查看
786
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部