this slowpoke moves

Move Components Drag&Drop

Das folgende Beispiel zeigt, wie sich jede Komponente per Drag&Drop innerhalb des Fensters bewegen lässt.

Das Fenster bekommt den OnEvent "OnDragOver" und jede Komponente, die bewegt werden soll, die beiden OnEvents "OnDragOver" & "OnMouseDown".

Die beste Methode die OnEvents hinzuzufügen ist, einen Doppelklick auf die jeweilige Aktion auszuführen und allen anderen zusätzlichen Komponenten im OnEvent Menü die Procedure zu geben.

var
  Form1: TForm1;
  MousePoint: TPoint;

//

procedure TForm1.DragDropControl(Source: TObject; X, Y, Increment: Integer);
var
  tempPoint:TPoint;
begin
  if (GetAsyncKeyState(VK_LCONTROL)) <> 0 then
    Increment:=1;

  getcursorpos(tempPoint);
  with (Source as TControl) do begin
    Top:=Round((Parent as TControl).screentoclient(tempPoint).Y/Increment)*Increment-MousePoint.Y;
    Left:=Round((Parent as TControl).screentoclient(tempPoint).X/Increment)*Increment-MousePoint.X;
    end;
  end;

procedure TForm1.ControlMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MousePoint.X:=X;
  MousePoint.Y:=Y;
  (Sender as TControl).begindrag(false,strtointdef(edDistanceAvantDrag.text,30));
  end;

procedure TForm1.ControlDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  DragDropControl(Source,X,Y,strtointdef(edTailleGrille.text,16));
  Accept:=true;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate