Cursorposition abfragen während OnResize-Event?

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Cursorposition abfragen während OnResize-Event?

Beitrag von br_klaus »

Hallo, ich habe eine Form mit einem TImage.
Weiß jemand eine Möglichkeit, wie man die Position des Cursors (bzw die gerade aktuellen Maße der Form) WÄHREND des OnResize-Events abfragen und dementsprechend das davon abhängige Bild (TImage) ändern kann?
Bis jetzt sehe ich nur die Möglichkeit, die Größenänderung der Form abzuschließen und dann über OnResize die Veränderung der Höhe und Breite zu verarbeiten. Ich bräuchte einen Bezugspunkt außerhalb der Form. Vielleicht geht es irgendwie über die (Windows-) Messages, die während der Größenänderung gesendet werden?
Herzlichen Dank!
P. Nikolaus

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Cursorposition abfragen während OnResize-Event?

Beitrag von Socke »

br_klaus hat geschrieben:Weiß jemand eine Möglichkeit, wie man die Position des Cursors (bzw die gerade aktuellen Maße der Form) WÄHREND des OnResize-Events abfragen und dementsprechend das davon abhängige Bild (TImage) ändern kann?

Die aktuelle Position des Mauszeigers kannst du über Forms.Mouse.CursorPos abfragen
br_klaus hat geschrieben:Bis jetzt sehe ich nur die Möglichkeit, die Größenänderung der Form abzuschließen und dann über OnResize die Veränderung der Höhe und Breite zu verarbeiten. Ich bräuchte einen Bezugspunkt außerhalb der Form. Vielleicht geht es irgendwie über die (Windows-) Messages, die während der Größenänderung gesendet werden?

Mir ist nicht wirklich klar, was du erreichen willst. Insbesondere ist mir nicht klar, inwiefern du zum Berechnen der Größe eines Steuerelementes eine Bezugsgröße außerhalb des Formulars benötigst -- zumal die Mausposition auch eine Position haben kann, die nichts mit der Größenänderung zu tun hat (bspw. über einen Doppelklick in die Kopfzeile).
Zuletzt geändert von Socke am Mi 27. Apr 2011, 19:17, insgesamt 2-mal geändert.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Cursorposition abfragen während OnResize-Event?

Beitrag von MAC »

der meinung bin ich auch.
Wenn du das OnResize kontrolieren willst.
Dann nimm BorderStyle = bsnone und erarbeite das resizen selber - ist nicht schwer, sieht am ende nur nicht schön aus :D

Code: Alles auswählen

Signatur := nil;

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Cursorposition abfragen während OnResize-Event?

Beitrag von br_klaus »

Und gibt es eine Möglichkeit, die aktuelle Formgröße zu ermitteln WÄHREND des Onresize? Normalerweise bleibt ja die Form davon unberührt, erst beim Loslassen der Maus werden die Änderungen wirksam.
Kann man die Änderungen schon während der Mausbewegung sichtbar machen?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Cursorposition abfragen während OnResize-Event?

Beitrag von Socke »

br_klaus hat geschrieben:Und gibt es eine Möglichkeit, die aktuelle Formgröße zu ermitteln WÄHREND des Onresize? Normalerweise bleibt ja die Form davon unberührt, erst beim Loslassen der Maus werden die Änderungen wirksam.

Ich kann mir vorstellen, dass dies auch vom jeweiligen Window-Manager abhängig ist, also unter einigen Window-Managern überhaupt nicht funktioniert. Aber in diesen Fällen dürfte das Formular bis zur Größenänderung auch gar nicht mitbekommen, dass die Größe geändert wird, und somit OnResize gar nicht erst auslösen.

Bei mir (Debian 6, GNOME, Metacity, GTK 2) füllt dieser Code meine Listbox wunderbar:

Code: Alles auswählen

var
  r: TRect;
begin
  r := BoundsRect;
  ListBox1.Items.Add(IntToStr(r.Right - r.Left)+'x'+IntToStr(r.Bottom-r.Top));
  Application.ProcessMessages;
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Cursorposition abfragen während OnResize-Event?

Beitrag von br_klaus »

Und wo bzw wann wird dieser Code aufgerufen?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Cursorposition abfragen während OnResize-Event?

Beitrag von Socke »

br_klaus hat geschrieben:Und wo bzw wann wird dieser Code aufgerufen?

Beispielsweise
br_klaus hat geschrieben:WÄHREND des Onresize

oder auch in OnChangeBounds (das wird direkt davor aufgerufen) -- je nachdem was du willst.

Inwiefern das Application.ProcessMessages(); wichtig ist, kann ich dir nicht sagen; ich habs einfach mal reingeschrieben, damit auf jeden Fall neu gezeichnet wird und ich die Einträge in der ListBox sehe.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten