在form上,想把一个image控件拖放到form1上的任何位置,于是在image1上加上dragover事件procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;State: TDragState; var Accept: Boolean);
begin
form1.Edit1.Text:='x:'+inttostr(x)+',y:'+inttostr(y);
image1.Left:=x;
image1.Top:=y;
image1.Refresh;
end;
但是,每次一开始拖动,image马上出现在form最左上角的地方,而且,拖来拖去都拖不出左上角那块小小的区域。后来发现,原来这个image1的width是33,height也是33,拖动时,image.left,image.top最大只能是32,所以才局限在form的左上角。 这问这是什么回事,怎么解决。分数不多了,请大家帮帮忙,谢谢。

解决方案 »

  1.   

    把Image放到Panel上
    然后在Image的OnMouseDown写如下代码,就可以实现拖动了procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if (Button = mbLeft) then//按下鼠标左按钮
      begin
        PostMessage(Panel1.Handle, WM_SYSCOMMAND, SC_MOVE or 2, 0);
        ReleaseCapture;
      end;
    end;
      

  2.   

    Panel1.DoubleBuffered := True; 可以避免拖动的时候屏幕闪烁
      

  3.   

    看看你的X、Y是不是最大就是33呢?
    试试这个:
    var
      pt: TPoint;
    begin
      pt.X := X;
      pt.Y := Y;
      pt := ClientToParent(pt);
      Image1.Left := pt.X;
      Image1.Top := pt.Y;
      Image1.Refresh;
    end;