Re: Fenster verschieben?
Danke, @DeddyH, so klappt es! Problem gelöst!
|
Re: Fenster verschieben?
Wenn Du das jetzt auch noch nachvollziehen kannst, sind ja alle zufrieden :zwinker:
|
Re: Fenster verschieben?
Zitat:
Left + X - DeltaX Left + Y - DeltaY In FormMouseDown werden DeltaX,DeltaY vorzeichengerecht ermittelt. Dann kommt die fragliche Berechnung.
Delphi-Quellcode:
Wie sind X und Y hier zu interpretieren?
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if ssLeft in Shift then begin Left := Left + X - DeltaX; Top := Top + Y - DeltaY; end; end; Habe soeben mal die Addition von X und Y entfernt (auskommentiert). Da funktioniert die Verschiebung nicht mehr. Und egal wei ich die Maus bewege, X und Y werden immer hinzu addiert. Das erkläre ich mir damit, das DeltaX,DeltaY wirklich die Differenz zur vorherigen Mausposition ist, während X und Y in FormMouseMove die aktuellen X,Y Werte der Mausposition sind. |
Re: Fenster verschieben?
Also, Du merkst Dir OnClick die aktuellen Koordinaten relativ zum Formular. Wenn man die Maus verschiebt, ändern sich diese logischerweise. Der Trick ist nun lediglich, das Formular so zu verschieben, dass die jetzt aktuellen Koordinaten wieder den gemerkten entsprechen. Dazu genügt uns die Addition von Form.Left bzw. Form.Top mit der Differenz aus aktuell und gemerkt. Dabei kann uns egal sein, ob die jeweilige Differenz positiv oder negativ ist, denn eine Addition mit einem negativen Wert entspricht ja einer Subtraktion. Für Details dazu siehe meine vorherigen Posts, ich möchte das nicht alles wiederholen.
|
Re: Fenster verschieben?
Ich würde die Variablen aber nicht Delta nennen. Delta weist immer auf eine Differenz hin. StartX bzw StartY (oder Offset) wäre da vielleicht passender.
|
Re: Fenster verschieben?
Meinetwegen kann er die auch Erbsensuppe nennen, am Anfang kommt es ja eher auf eine verständliche Problemlösung an. Aber gut, Du hast insofern Recht, als dass man auch meiner Meinung nach immer sprechende Namen verwenden sollte, sonst steigt man später durch seinen eigenen Code nicht mehr durch.
|
Re: Fenster verschieben?
Hallo,
bin noch immer beim Nachvollziehen meines Quelltextes. Zum besseren Verständnis habe ich den Hinweis von @NamenLozer aufgegriffen. Ich habe also die bisherigen DeltaX,DeltaY Variablen in StartX und StartY umbenannt, weil diese Werte unabhängig von der Bewegungsrichtung der Maus immer positiv sind. Danach müssten DeltaX,DeltaY die Differenz zum Startpunkt in FormMouseDown und dem aktuellen Punkt in FormMouseUp bzw. FormMouseMove sein. Der folgende Quelltext zeigt mir aber in FormMouseUp den Wert 0 für DeltaX und DeltaY an. Irgendwas habe ich da doch noch nicht verstanden. Bitte helft mir noch mal. Hier sind meine Änderungen.
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if ssLeft in Shift Then begin Left := Left + X - StartX; Top := Top + Y - StartY; end; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var P: TPoint; begin StartX := X; StartY := Y; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin DeltaX := X - StartX; DeltaY := Y - StartY; lbMouseX.Caption := IntToStr(DeltaX); lbMouseY.Caption := IntToStr(DeltaY); end; |
Re: Fenster verschieben?
Zitat:
|
Re: Fenster verschieben?
Liste der Anhänge anzeigen (Anzahl: 1)
Vielleicht hilft dir ne bildliche Darstellung des Problems bzw der Lösung!
MfG |
Re: Fenster verschieben?
:thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz