我的窗体是MDIFORM,窗体上上有几个TImage控件,希望可以实现运行时TImage可以拖动,并定在新位置,不知该如何实现,请教请教。

解决方案 »

  1.   

    对它的OnDragOver,OnDragDrop做处理。比如:
    procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
      if (Sender.ClassNameIs('TForm1')) and (Source.ClassNameIs('TImage')) then
      begin
        Image1.Parent := Form1;
        Image1.Top := 0;
        Image1.Left := 0;
        Image1.Align := alClient;
      end;
    end;procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
      if (Sender.ClassNameIs('TPanel')) and (Source.ClassNameIs('TImage')) then
      begin
        Image1.Parent := Panel1;
        Image1.Top := 0;
        Image1.Left := 0;
        Image1.Align := alClient;
      end;
    end;procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if Source.ClassNameIs('TImage') then
      begin
        Accept := true;
      end;
    end;procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if Source.ClassNameIs('TImage') then
      begin
        Accept := true;
      end;
    end;
      

  2.   

    当然在我这儿判断的条件跟你的不一样,你可以根据不同的条件来重新定位你的TImage,比如Tag等等。
      

  3.   

    var
      StartX, StartY: Integer;
      CanMove: Boolean= false;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if CanMove then
      begin
        Image1.Left:= Image1.Left+(x-StartX);
        Image1.Top:= Image1.Top+(y-StartY);
      end;
    end;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      CanMove:= true;
      StartX:= x;
      StartY:= y;
    end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      CanMove:= false;
    end;
      

  4.   

    var
      BeginX, BeginY: Integer;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      BeginX:= x;
      BeginY:= y;
    end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if ssLeft in shift then //鼠标左键是否按下
      begin
        Image1.Left:= Image1.Left+(x-BeginX);
        Image1.Top:= Image1.Top+(y-BeginY);
      end;
    end;
      

  5.   

    var blnDrop:boolean;
    procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
    accept:=true;
    end;procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
    if blndrop then
    begin
    image1.Left:=x;
    image1.Top:=y;
    blndrop:=false;
    end;
    end;procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
    blndrop:=true;
    image1.drogmode:=dmAutomatic;end;
      

  6.   

    to huangrenguang(湖) 
    :你的方法我试过。好像不灵。
      

  7.   

    不会把,应当说是可以拖的,你的记住设置TImage的DragMode属性为dmAutomatic