AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Form.Top und Height während des Verschiebens ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Form.Top und Height während des Verschiebens ermitteln

Ein Thema von PinKing2 · begonnen am 29. Apr 2009 · letzter Beitrag vom 30. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von PinKing2
PinKing2

Registriert seit: 9. Aug 2007
29 Beiträge
 
#1

Form.Top und Height während des Verschiebens ermitteln

  Alt 29. Apr 2009, 21:48
Hallo zusammen,

ich möchte während des Verschiebens einer Form die neuen Werte für Top und Height
ermitteln (also die Werte wo die Form während des Verschiebens gerade ist).
Ich bekomme die Werte aber immer erst, wenn ich die Maustaste loslasse und
die Form an der Endposition angekommen ist.

Gibt es einen Trick die Werte auch zwischendurch zu ermitteln?

Eine Funktion TForm1.WMMOVE(var Msg: TWMMove); habe ich drin,
nur was muss ich da drin jetzt machen, damit die Werte aktualisiert werden?

Wäre für einen kleinen Tipp echt dankbar!


Gruss,

Andy.

Delphi 2005 PE
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.588 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Form.Top und Height während des Verschiebens ermitteln

  Alt 29. Apr 2009, 22:18
Benutze einfach das Ereignis OnCanResize deines Formulars. Anders als OnResize wird dieses Ereignis bereits während des Verschiebens aufgerufen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Form.Top und Height während des Verschiebens ermitteln

  Alt 29. Apr 2009, 22:22
schau mal im MSDN unter wm_move nach. ich glaube, Delphi sollte auch einen TWMMove Record bereit stellen. Imho ist im WParam ein Zeiger auf einen Rect-Record abgelegt. Mit TRect(Msg.WParam^) solltest du an die Koordinaten kommen.

wm_move wird definitiv auch während der Bewegung ausgelöst.

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.588 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Form.Top und Height während des Verschiebens ermitteln

  Alt 29. Apr 2009, 22:26
Funktioniert ja sicherlich auch. Und man kann ja auch direkt Top und Left in WMMove abfragen, das klappt sicher auch, denn wenn das Formular an der neuen Stelle ist, dann sind diese Werte auch aktualisiert.

// EDIT:
Es gibt auch: Msg.XPos, Msg.YPos, Msg.Pos.x, Msg.Pos.y
Und das klappt so auch:
Delphi-Quellcode:
  TForm1 = class(TForm)
  private
    { Private declarations }
    procedure WMMove(var Msg: TWMMove); message WM_MOVE;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMMove(var Msg: TWMMove);
begin
  Caption := IntToStr(Left) + ', ' + IntToStr(Top);
end;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von PinKing2
PinKing2

Registriert seit: 9. Aug 2007
29 Beiträge
 
#5

Re: Form.Top und Height während des Verschiebens ermitteln

  Alt 29. Apr 2009, 23:38
Hallo,

vielen Dank für die Antworten. Leider funktioniert das bei mir nicht.

Delphi-Quellcode:
procedure TForm2.WMMOVE(var Msg: TWMMove);
begin
    Form1.Label2.Caption:= IntToStr(Top);
end;
Wenn ich Form2 bewege, wird Label2 von Form1 erst dann geändert, wenn ich
die Maustaste loslasse.

Was mache ich falsch?

Gruss,

Andy.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.588 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Form.Top und Height während des Verschiebens ermitteln

  Alt 29. Apr 2009, 23:42
Das kann ich nicht reproduzieren, jedenfalls unter Vista hier nicht.

Benutzt du noch XP? Dann müsste ich das in einem virtuellen PC einmal testen, richtig installiert habe ich es nur noch auf einem Testrechner.

// EDIT:
Auch unter XP klappt das wunderbar. Läuft da noch etwas anderes im Hintergrund oder so?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von PinKing2
PinKing2

Registriert seit: 9. Aug 2007
29 Beiträge
 
#7

Re: Form.Top und Height während des Verschiebens ermitteln

  Alt 30. Apr 2009, 00:14
Ja, ich arbeite mit XP und es läuft nichts besonderes
im Hintergrund.

Vielen Dank für Eure Mühen, ich muss nun erst mal schlafen
und werde mir die Sache die Tage mal in Ruhe ansehen.
Wenn ich den Fehler bei mir finde, melde ich mich...

Gruss,

Andy.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.588 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Form.Top und Height während des Verschiebens ermitteln

  Alt 30. Apr 2009, 00:16
Hier mal mein Testprojekt, getestet mit Delphi 7 und 2006, Windows XP und Vista.
Angehängte Dateien
Dateityp: zip wmmove_test_204.zip (195,4 KB, 6x aufgerufen)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von PinKing2
PinKing2

Registriert seit: 9. Aug 2007
29 Beiträge
 
#9

Re: Form.Top und Height während des Verschiebens ermitteln

  Alt 30. Apr 2009, 07:08
Hallo Sebastian,

auch bei Deinem Programm funktioniert das bei mir nicht.
Ich öffnen die zweite Form über den Button und verschiebe
dann die zweite Form. Dein Label für Top auf Form1 wird bei
mir immer erst aktualisiert, wenn ich die Maustaste loslasse...

Könnte es auch an der Grafikkarte und dessen Treibern liegen,
oder muss man zwischendurch den Screen refreshen, oder sowas?


Trotzdem vielen Dank für Deine Mühen!

Gruss,

Andy.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Form.Top und Height während des Verschiebens ermitteln

  Alt 30. Apr 2009, 07:16
Zitat von PinKing2:
Hallo,

vielen Dank für die Antworten. Leider funktioniert das bei mir nicht.

Delphi-Quellcode:
procedure TForm2.WMMOVE(var Msg: TWMMove);
begin
    Form1.Label2.Caption:= IntToStr(Top);
end;
Wenn ich Form2 bewege, wird Label2 von Form1 erst dann geändert, wenn ich
die Maustaste loslasse.

Was mache ich falsch?

Gruss,

Andy.
wm_move liefert dir die neuen Koordinaten vor der Änderung in Msg. Somit hast du die Möglichkeit diese zu beeinflussen. Left, Top .. sind zu diesem Zeitpunkt noch nicht die neuen Werte. Läßt du das Msg ohne Änderung durchgehen, werden die darin enthaltenen neuen Koordinaten für Left, Top etc. übernommen. Geändert sind die Werte erst in wm_moved. Da kannst du auf Left und Top uns Width ... zugreifen.
Also sind bei wm_move die Koordinaten in Msg nicht identisch mit den Propertys des Fensers.

Somit musst du es so machen wie ich es beschrieben hatte oder das so schreiben:
Delphi-Quellcode:
procedure TForm2.WMMOVE(var Msg: TWMMove);
begin
  inherited;
  Form1.Label2.Caption:= IntToStr(Top);
  Application.ProcessMessages; // das mal testen, kann aber auch Probleme verursachen
end;
Gruß oki
42
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:03 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