TLabel既可以响应DblCLick事件,又可以响应DragDrop的疑惑?D5的Bug?(100分)

  • 主题发起人 主题发起人 wgzhang
  • 开始时间 开始时间
W

wgzhang

Unregistered / Unconfirmed
GUEST, unregistred user!
新建Form1,Form2,在Form1上,放两个Label,都有以下事件DblClick,MouseDown,DragDrop和DragOver.
一切运行正常.
如果在DblClick时,把 Form2.Show;改成 Form2.ShowModal;
关闭Form2后,注意鼠标的模样!
procedure TForm1.Label1DblClick(Sender: TObject);
begin
(Sender as TLabel).Caption:='DblClick';
Form2.Show;
end;

procedure TForm1.Label1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
(Sender as TLabel).begin
Drag(False,10);
end;

procedure TForm1.Label1DragDrop(Sender, Source: TObject;
X, Y: Integer);
begin
(Sender as TLabel).Caption:=(Source as TLabel).Caption;
end;

procedure TForm1.Label1DragOver(Sender, Source: TObject;
X, Y: Integer;
State: TDragState;
var Accept: Boolean);
begin
Accept:=(Sender is TLabel);
end;
 
hehe, mousedown先于dblclick事件, 这是肯定的.
 
我试验了一下,Show和ShowModal是有区别的:
用Show的话,在触发dblclick之前,mousedown触发了两次。
用ShowModal的话,在触发dblclick之前,mousedown只触发了一次,
等关闭Form2以后,mousedown再次被触发。
这就是鼠标成为DragDrop样子的原因。
 
如果在showmodal之后,清除鼠标消息队列里的相应moudedown,也许可以.
不过,这应该算一个bug吧!
 
DblClick是响应的,而且先响应,在用Form2.Show,一切正常.
改成Form2.ShowModal;当Form2关闭后,返回到Form1时,执行OnMouseDown,
此时鼠标处于DragDrop状态.
 
cAKK:怎么清除鼠标消息队列里的相应mousedown?
 
我也不知道,只是直觉上认为可以这么做. :-(
 
D5是这样,D4也这样,只能用Show了?
 
如果只是针对这个问题,那是很容易解决的,在Form1
设置一个公共变量bShowModal,缺省为false,在ShowModal
之前设为true,在MouseDown里判断一下bShowModal就
可以了。
procedure TForm1.Label1DblClick(Sender: TObject);
begin
(Sender as TLabel).Caption:='DblClick';
bShowModal := true;
Form2.ShowModal;
end;

procedure TForm1.Label1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
if(bShowModal) then
begin
bShowModal := false;
exit;
end
else
(Sender as TLabel).begin
Drag(False,10);
end;
 
要不只好这样了,在showmodal之后,立即发送一个ESC键;
(Sender as TLabel).Caption:='DblClick';
Form2.Showmodal;
keybd_event(Vk_ESCAPE,0,0,0);
这样到是可以解决问题,不知你满意吗?
 
对了, 如何清楚键盘缓存? 如我按了100个回车键, 到50个, 想放弃按键.
 
按两位老兄说的应该都可以,但是总觉得别扭.
还有好方法吗?
 
算了,分赃吧!:-)
 

Similar threads

I
回复
0
查看
724
import
I
I
回复
0
查看
509
import
I
S
回复
0
查看
830
SUNSTONE的Delphi笔记
S
后退
顶部