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.

解决方案 »

  1.   

    楼上两位大侠有qq吗?我的qq是 863719431
      

  2.   

    我把代码传上来了 
    http://bbs.2ccc.com/topic.asp?topicid=376872
    http://bbs.2ccc.com/attachments/2011/bigboy2050_201141815152.rar请帮我改改好吗写了拖动事件,双击事件就不起作用了,ShowMessage('双击事件!'); 不弹出对话框了,见附件,请各位大侠多多指教啊 
      

  3.   

    我要的效果是 双击时,弹出对话框
    ShowMessage('双击事件!');
    拖动放下时,弹出对话框
    ShowMessage( Format('从%s拖动到%s',[TImage(Source).Name,TImage(Sender).Name]) );
    问题是:
    现在我双击时,却弹出 拖动放下事件的对话框了。双击事件的对话框没有弹出。
      

  4.   

    Image控件的Dragmode := dmManual;procedure TForm1.Image1DblClick(Sender: TObject);
    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看效果~~
      

  5.   


    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;试试这样行不..
      

  6.   

    newfang 大侠,我传上来的附件可以下载吗?你可以在我的附件里面的代码上修改吗?我双击事件 和拖动放下事件 都想要的。
      

  7.   


    mdejtod大侠,我双击事件 和拖动放下事件 都想要的,因为我要写不同的处理逻辑。我单独写ImageDblClick事件 或者 ImageDragOver事件,程序是起作用的,两个事件都写,ImageDblClick事件 就不起作用了,就有冲突了
      

  8.   

    newfang大侠将
    procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      TImage(sender).BeginDrag(False);
    end;用了 BeginDrag(False);
    在一个图片上双击可以弹出 双击事件的对话框,
    但移到另外一个图片上双击,又变成 拖动放下事件的对话框了。
    你可以多测试几次,在两个图片上 双击和拖动 多试几次
      

  9.   

    你不要在DblClick中使用showmessage来看效果。
    那样会影响程序的执行流程。你可以加一个memo,往里面写日志来查看执行流程
      

  10.   


    不写showmessage不行啊。我要在这两个事件 弹出不同的窗体form,实现不同的功能呢
      

  11.   

    DblClick中如果showmodal窗体,可以在窗体的create后面加个标志变量。用来区分双击和拖拽。或者你就不要用双击了,用右键菜单吧
      

  12.   

    你这个要求吧,就得去区分单击,双击事件
    双击事件先触发的就是MouseDown消息。
      

  13.   

    我用了个笨方法可以实现定义两变量MoveFlag,IsDblClick:Boolean;
    双击事件IsDblClick:=True;
    鼠标按下MoveFlag:=True;
    鼠标移动时
    if IsDblClick then
      begin
        IsDblClick:=False;
        MoveFlag:=False;
        Exit;
      end;MouseUp时 MoveFlag:=False;
    很简单的实现了双击和拖动
      

  14.   

    我也是这样的问题,但是实在点net下面同时拥有双击和拖拽,只能触发拖拽真是好奇windows的form是怎么实现的啊