Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Event bei "Restore Down" oder "Restore Up" (https://www.delphipraxis.net/214397-event-bei-restore-down-oder-restore-up.html)

TommyBe90 5. Jan 2024 16:11

Event bei "Restore Down" oder "Restore Up"
 
Hallo,

ich habe folgendes Problem: Nach der Skalierung meines Forms muss ich ein bestimmtes Event aufrufen.
Dies lässt sich auch grundsätzlich über die Message WM_EXITSIZEMOVE realisieren.
Allerdings ist WM_EXITSIZEMOVE wirkungslos, wenn ich ein maximiertes Form mittels "Restore Down" oder
oder ein minimiertes Form mit "Restore Up" skaliere.

Kennt jemand eine Lösung (ein Event oder ähnliches) oder einen Work-Around?

Besten Dank im Vorraus

Tommy

Uwe Raabe 5. Jan 2024 16:46

AW: Event bei "Restore Down" oder "Restore Up"
 
Was meinst du denn genau mit "Skalierung"? Nicht etwa lediglich eine Größenänderung?

TommyBe90 8. Jan 2024 07:00

AW: Event bei "Restore Down" oder "Restore Up"
 
Genau. Letztendlich meine ich eine Größenänderung. Also wenn ich meine Anwendung minimiert oder maximiert habe
und mittels der Menu-Buttons verkleinern/restore down oder vergrößern/restore up mein Form als "Restored" anzeige.

Wenn ich manuell - mittels Maus an den Formular-Rändern - meine Größe ändere, so funktioniert das WM_EXITSIZEMOVE Event.

Ich hoffe, dass du nun verstehtst was ich meine?

VG

jaenicke 8. Jan 2024 07:36

AW: Event bei "Restore Down" oder "Restore Up"
 
Wie wäre es ganz simpel mit OnResize?

TommyBe90 8. Jan 2024 07:51

AW: Event bei "Restore Down" oder "Restore Up"
 
Danke für den Vorschlag. Allerdings will ich das aus Performannce-Gründen vermeiden.
Das schöne am WM_EXITSIZEMOVE Event ist, dass es erst nach der Größenänderung aufgerufen wird. Das klappt für mich grundsätzlich auch sehr gut,
jedoch nicht in den beiden Fällen von verkleinern/restore down und vergrößern/restore up.

jaenicke 8. Jan 2024 08:14

AW: Event bei "Restore Down" oder "Restore Up"
 
Deaktiviere OnResize doch einfach in WM_ENTERSIZEMOVE. Dann bekommst du WM_EXITSIZEMOVE weiter mit wie bisher und kannst es dort wieder aktivieren, aber wenn die Größenänderung durch andere externe Einflüsse (Wiederherstellen usw., externe Tools zur Fensterorganisation, ...) passiert ist, landest du in OnResize.

himitsu 8. Jan 2024 08:14

AW: Event bei "Restore Down" oder "Restore Up"
 
Auf WM_SIZE reagieren (wenn SIZE_MAXIMIZED/SIZE_MINIMIZED/SIZE_RESTORED)




Ist OnResize ein WM_SIZE oder WM_SIZING?

Wenn Zweites: dann einfach immer auf WM_SIZE reagieren.

Und wenn Erstes (vermutlich ja), dann .... Es gibt auch WM_ENTERSIZEMOVE. :wink:
Wenn OnResize zwischen WM_ENTERSIZEMOVE und WM_EXITSIZEMOVE, dann Dieses ignorieren und auf's Ende warten. :stupid:

TommyBe90 8. Jan 2024 08:40

AW: Event bei "Restore Down" oder "Restore Up"
 
Danke euch beiden. Das klingt grundsätzlich nach guten Vorschlägen. Allerdings habe ich da wohl einen spezielleren Fall.

Ich beschreibe nun mal mein Vorhaben:

Ich möchte eine Punktewolke von Daten mittels OpenGL darstellen. Wenn ich skaliere möchte ich einen runtergesampleten Datensatz darstellen,
um eine flüssige Darstellung während des Resize zu erhalten.
Wenn der Resize abgeschlossen ist soll der Datensatz wieder in voller Auflösung dargestellt werden.
Zur Darstellung der runtergesampleten Punktewolke - während des Resize-Vorganges - muss allerdings immer OnResize ausgeführt werden. :wink:

Ich hoffe ihr könnt euch nun mein Vorhaben besser vorstellen. :-)

himitsu 8. Jan 2024 10:08

AW: Event bei "Restore Down" oder "Restore Up"
 
also bei WM_ENTERSIZEMOVE runterskalieren

WM_EXITSIZEMOVE wieder vollständig, sowie auch bei WM_SIZE+SIZE_MAXIMIZED/SIZE_RESTORED das vollstänige aktualisieren

:?:

jaenicke 8. Jan 2024 10:22

AW: Event bei "Restore Down" oder "Restore Up"
 
Zitat:

Zitat von TommyBe90 (Beitrag 1531619)
Wenn ich skaliere möchte ich einen runtergesampleten Datensatz darstellen,
um eine flüssige Darstellung während des Resize zu erhalten.

Das ist doch genau der beschriebene Fall. Im WM_ENTERSIZEMOVE aktivierst du die niedrigere Auflösung (Flag setzen, Daten umschalten, wie auch immer), im WM_EXITSIZEMOVE schaltest du wieder auf die normale Darstellung. Im OnResize führst du dann die entsprechende Skalierung aus. Kommt das OnResize ohne die aktivierte Schnellskalierung, wurde ohne Maus oder Tastatur skaliert. Ist sie aktiviert, ist die Größenänderung durch Maus oder Tastatur noch aktiv.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 Uhr.
Seite 1 von 2  1 2      

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