如何只执行鼠标“双击”而不执行“单击”?谁能给我一小段代码(200分)

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

WangZhaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要在Timage.OnMouseDown下只执行双击而不执行单击操作。
(if ssDouble in shift) 不行啊,它总是先执行单击操作。
 
我试了一下完全可以啊,

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssDouble in shift then showmessage('1');
end;
 
你的代码是怎么写的呢?是不是onClick事件中也有代码呢?把它都放到onMouseDown事件下吧:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssDouble in shift then showmessage('1')
else ......//执行onClick下的事件。
end;
 
噢,我没说清楚,我是说执行了双击后就退出去,不想往下执行button = mbleft的语句了。
procedure TfrmECG.imgStyleEditMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ssDouble in Shift then
begin
showmessage('ok');
exit;
end;
if button = mbleft then showmessage('我不想执行这句');
end;
 
同意二楼。
 
procedure TfrmECG.imgStyleEditMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ssDouble in Shift then
begin
showmessage('ok');
exit;
end
else
if button = mbleft then showmessage('我不想执行这句');
end;
 
to hongxing_dl ,不行的,总是先执行if button = mbleft,因为双击时总是先执行单击,
好象用Hook能行,但我不会呀:(
 
哦——是这样的,双击就是两个单击。这样呢??
procedure TfrmECG.imgStyleEditMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if button = mbleft then
begin
if ssDouble in Shift then
begin
showmessage('ok');
exit;
end;
showmessage('我不想执行这句');
end;
可以了吧
 
to hongxing_dl,还是不行啊:(
 
WangZhaoHui:
我真的不明白你的意思,首先,单击(click)并不是MouseDown,而是mouseDown和鼠标在原来的位置mouseup,
而且:
不明白为什么放弃 onClick, onDbClick
看来你必须先将你的意图说清楚。
 
procedure TfrmECG.imgStyleEditMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (button = mbleft) and (ssDouble in Shift) then
begin
showmessage('ok');
exit;
end;
end;
 
to hongxing_dl,不行的,
 
为什么呀??
你既然不执行那句,你就不写那句就行了啊——
我这里是通过的:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (button=mbleft) and (ssdouble in shift) then//双击
showmessage('dblclick')
end;
 
我同意Let_it_be的说法

我猜楼主是想屏蔽 mousedown,而不是 click(单击)

以上所有的答案没有任何作用。
 
我的意思是:
procedure TfrmECG.imgStyleEditMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (button = mbleft) then
begin
if (ssDouble in Shift) then
begin
showmessage('ok');
exit;
end;
Showmessage('如果只单击一下左键,执行我,双击左键就不执行我了:)');
end;
end;
 
你的意思我明白,但我还是不明白你的作用;
实现方法:
procedure TfrmECG.imgStyleEditMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (button = mbleft) then
begin
releaseCapture;
if (ssDouble in Shift) then
begin
showmessage('ok');
exit;
end;
Showmessage('如果只单击一下左键,执行我,双击左键就不执行我了:)');
end;
end;
试试看,不一定能行;
但还有另外的方法;

 
to let_it_be,谢谢你,还是不行
我的作用:双击时进入窗口1,单击时进入窗口2,由于双击之前必须执行单击,所以只能进入窗口2,其时我也不想这样
 
你干吗不在OnDblClick和OnClick事件触发呢,非要在OnMouseDown执行。
 
to wjh_wy,一样的,执行ondbclick之前总会先执行onclick的代码,我的意思就是如果我双击就不执行onclick的代码了.
 
你的怪问题有答案了,给分吧!我付出几个小时呢。
先定义:clickTimes: integer;
procedure TF.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
count: integer;
begin
if button<>mbLeft then exit;
count:=getTickcount;
clickTimes:=1;
if (ssDouble in Shift) then clickTimes:=2;
while getTickCount<GetDoubleClickTime+count
do Application.ProcessMessages;
if clickTimes=1
then
Showmessage('如果只单击一下左键,执行我,双击左键就不执行我了:')
else
if clickTimes=2 then showmessage('Only dbClick');
clickTimes:=0;
end;
 
后退
顶部