AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fenster verschieben?

Ein Thema von DualCoreCpu · begonnen am 11. Sep 2009 · letzter Beitrag vom 29. Mai 2016
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
DualCoreCpu
(Gast)

n/a Beiträge
 
#31

Re: Fenster verschieben?

  Alt 12. Sep 2009, 17:36
Danke, @DeddyH, so klappt es! Problem gelöst!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#32

Re: Fenster verschieben?

  Alt 12. Sep 2009, 17:37
Wenn Du das jetzt auch noch nachvollziehen kannst, sind ja alle zufrieden
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#33

Re: Fenster verschieben?

  Alt 12. Sep 2009, 17:49
Zitat von DeddyH:
Wenn Du das jetzt auch noch nachvollziehen kannst, sind ja alle zufrieden
Werde mir das auf jeden Fall noch durcharbeiten. Klar, wenn X und Y relativ zum Formular zu betrachten sind, dann entsprechen X und Y der Strecke der Mausbewegung und die Richtung müsste sich dann mit dem Vorzeichen ergeben.

Left + X - DeltaX
Left + Y - DeltaY



In FormMouseDown werden DeltaX,DeltaY vorzeichengerecht ermittelt. Dann kommt die fragliche Berechnung.

Delphi-Quellcode:
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;
Wie sind X und Y hier zu interpretieren?

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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#34

Re: Fenster verschieben?

  Alt 12. Sep 2009, 18:14
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#35

Re: Fenster verschieben?

  Alt 12. Sep 2009, 21:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#36

Re: Fenster verschieben?

  Alt 12. Sep 2009, 21:33
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#37

Re: Fenster verschieben?

  Alt 13. Sep 2009, 08:22
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#38

Re: Fenster verschieben?

  Alt 13. Sep 2009, 09:31
Zitat von DeddyH:
Der Trick ist nun lediglich, das Formular so zu verschieben, dass die jetzt aktuellen Koordinaten wieder den gemerkten entsprechen.
Also muss die Differenz logischerweise 0 sein, sonst hätten wir etwas falsch gemacht
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#39

Re: Fenster verschieben?

  Alt 13. Sep 2009, 09:57
Vielleicht hilft dir ne bildliche Darstellung des Problems bzw der Lösung!

MfG
Miniaturansicht angehängter Grafiken
zeichnerische_darstellung_190.jpg  
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#40

Re: Fenster verschieben?

  Alt 13. Sep 2009, 09:59
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:14 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