unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
procedure ImageDblClick(Sender: TObject);
procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ImageDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure ImageDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ImageDblClick(Sender: TObject);
begin
ShowMessage('双击事件!');
end;procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Sender is TImage then TImage(sender).BeginDrag(True);
end;procedure TForm1.ImageDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=True;
end;procedure TForm1.ImageDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
//if (Source is TImage) and (Sender is TImage) then
// ShowMessage( Format('从%s拖动到%s',[TImage(Source).Name,TImage(Sender).Name]) );
如果不注释掉这两行,就不能响应 ImageDblClick的双击事件,
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.DragMode:=dmManual;
Image2.DragMode:=dmManual; Image1.OnMouseDown:= ImageMouseDown;
Image2.OnMouseDown:= ImageMouseDown; Image1.OnDblClick:= ImageDblClick;
Image2.OnDblClick:= ImageDblClick; Image1.OnDragDrop:= ImageDragDrop;
Image2.OnDragDrop:= ImageDragDrop; Image1.OnDragOver:= ImageDragOver;
Image2.OnDragOver:= ImageDragOver;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
procedure ImageDblClick(Sender: TObject);
procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ImageDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure ImageDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ImageDblClick(Sender: TObject);
begin
ShowMessage('双击事件!');
end;procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Sender is TImage then TImage(sender).BeginDrag(True);
end;procedure TForm1.ImageDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=True;
end;procedure TForm1.ImageDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
//if (Source is TImage) and (Sender is TImage) then
// ShowMessage( Format('从%s拖动到%s',[TImage(Source).Name,TImage(Sender).Name]) );
如果不注释掉这两行,就不能响应 ImageDblClick的双击事件,
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.DragMode:=dmManual;
Image2.DragMode:=dmManual; Image1.OnMouseDown:= ImageMouseDown;
Image2.OnMouseDown:= ImageMouseDown; Image1.OnDblClick:= ImageDblClick;
Image2.OnDblClick:= ImageDblClick; Image1.OnDragDrop:= ImageDragDrop;
Image2.OnDragDrop:= ImageDragDrop; Image1.OnDragOver:= ImageDragOver;
Image2.OnDragOver:= ImageDragOver;
end;end.
http://bbs.2ccc.com/topic.asp?topicid=376872
http://bbs.2ccc.com/attachments/2011/bigboy2050_201141815152.rar请帮我改改好吗写了拖动事件,双击事件就不起作用了,ShowMessage('双击事件!'); 不弹出对话框了,见附件,请各位大侠多多指教啊
ShowMessage('双击事件!');
拖动放下时,弹出对话框
ShowMessage( Format('从%s拖动到%s',[TImage(Source).Name,TImage(Sender).Name]) );
问题是:
现在我双击时,却弹出 拖动放下事件的对话框了。双击事件的对话框没有弹出。
begin
Label3.Caption := Inttostr(gettickcount);
Label1.Caption := 'dbclick';
end;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TImage(sender).BeginDrag(False);
end;procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := True;
end;procedure TForm1.Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
Label6.Caption := 'move';
end;不要用showmessage看效果~~
var bDragDown : boolean;
procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Sender is TImage then
begin
bDragDown := button = mbleft;
end;
end;procedure TForm1.ImageMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if bDragDown then
begin
TImage(Sender).BeginDrag(False);
end;
end;procedure TForm1.ImageDragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
if Tcontrol(source) is timage then
begin
//处理
TImage(Source).EndDrag(false);
end;
end;procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Sender is TImage then
begin
bDragDown := false;
end;
end;试试这样行不..
mdejtod大侠,我双击事件 和拖动放下事件 都想要的,因为我要写不同的处理逻辑。我单独写ImageDblClick事件 或者 ImageDragOver事件,程序是起作用的,两个事件都写,ImageDblClick事件 就不起作用了,就有冲突了
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TImage(sender).BeginDrag(False);
end;用了 BeginDrag(False);
在一个图片上双击可以弹出 双击事件的对话框,
但移到另外一个图片上双击,又变成 拖动放下事件的对话框了。
你可以多测试几次,在两个图片上 双击和拖动 多试几次
那样会影响程序的执行流程。你可以加一个memo,往里面写日志来查看执行流程
不写showmessage不行啊。我要在这两个事件 弹出不同的窗体form,实现不同的功能呢
双击事件先触发的就是MouseDown消息。
双击事件IsDblClick:=True;
鼠标按下MoveFlag:=True;
鼠标移动时
if IsDblClick then
begin
IsDblClick:=False;
MoveFlag:=False;
Exit;
end;MouseUp时 MoveFlag:=False;
很简单的实现了双击和拖动