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