![]() |
Komponente auf Client verschieben
Hallo
ich möchte für mein Preview eine kleine Bitmap auf eine andere Komponente (z.B. Image auf Panel) Mit der Maus verschieben, aber das Object (Image) was ich verschiebe, soll immer 100% sichtbar d.h. Left Object.left kann nicht < 0 und Object.Top kann nicht <0 Und so weiter Oder kann man die Eigenschaften in ObjectInspector irgendwie einstellen wie im Anhang ![]() |
AW: Komponente auf Client verschieben
Evtl. findest Du hier
![]() :gruebel:Weshalb gibt es eigentlich so eine tolle Erfindung wie die Suchfunktion? |
AW: Komponente auf Client verschieben
Liste der Anhänge anzeigen (Anzahl: 1)
ich habe die Funktion getestet
OK aber das Objekt soll beim verschieben nicht die die Client-Grenzen überschreitten :(
Delphi-Quellcode:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin MoveControl(Sender,Button,Shift,X,Y); end; |
AW: Komponente auf Client verschieben
Dann überprüfe eben, wenn es an den Clientgrenze angekommen ist.
|
AW: Komponente auf Client verschieben
Naja, mit der auf SDC verlinkten Methode ist das nicht ganz trivial, da er die Kontrolle an Windows abgibt, sofern das zu bewegende Control ein Handle hat.
Ich fürchte, dass dies eine der Aufgabenstellungen ist, die sich nicht per Copy & Paste lösen lassen. :roll: |
AW: Komponente auf Client verschieben
Man könnte zumindestens zwischen
Delphi-Quellcode:
und
MoveControl(Sender,Button,Shift,X,Y);
Delphi-Quellcode:
, also nach dem Loslassen der Maustaste, die Position so anpassen, daß es innerhalb der Grenzen zum Erliegen kommt.
end;
|
AW: Komponente auf Client verschieben
Ich habe Dir mal etwas aus meiner Komponente für eine elektronische Pinnwand rauskopiert - um Dir nicht die Arbeit abzunehmen, musst Du den Weg selber finden. Programmieren ist oft auch Kopfzerbrechen...
Delphi-Quellcode:
Daniel hat natürlich Recht, bei der vorher genannten Methode wird einem das Zepter quasi aus der Hand genommen, deshalb habe ich damals auch diese Methode mit Erfolg angewendet.
private
FDownX, FDownY: integer; FDragging: Boolean; procedure TPinItem.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin BringToFront; if (ssDouble in Shift) then Exit; // Doppelklick abfangen if (Button = mbLeft) then begin FDownX := X; FDownY := Y; FDragging := True; MouseCapture := True; end; end; procedure TPinItem.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pw: Integer; begin if (Button = mbLeft) and FDragging then begin FDragging := False; MouseCapture := False; if (Left < 0) then Left := 0; if (Top < 0) then Top := 0; pw := Parent.Width - Width - 4; if (Left > pw) then Left := pw; end; end; procedure TPinItem.MouseMove(Shift: TShiftState; X, Y: Integer); begin if FDragging then begin Left := X - FDownX + Left; Top := Y - FDownY + Top; end; end; |
AW: Komponente auf Client verschieben
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz