Seite 1 von 1
WindowEvent Maximize, wie die Ursprungsgröße speichern
Verfasst: 03.05.2014 08:02
von Makke
Hallo zusammen,
wenn ich den Event #PB_Event_Maximize abfange um den für spätere Starts eines Programms zu speichern, passiert folgendes:
- Ich klicke auf Maximieren
- 1. Event #PB_Event_Move
- 2. Event #PB_Event_Size
- 3. Event #PB_Event_Maximize
Sobald ich also den Event abfange sind schon durch Size und Move die Koordinaten auf dem Maximum. Ich habe also keine möglichkeit die vorigen Koordinaten mehr abzufragen. Der Fenstermanager aber behält diese Koordinaten irgendwo, denn wenn ich Maximieren rückkängig mache (#PB_Event_Restore) erhält das Fenster die vorige Größe.
Wie komme ich an diese vorigen Koordinaten heran ?
Danke schonmal für Eure Hilfe.
Re: WindowEvent Maximize, wie die Ursprungsgröße speichern
Verfasst: 03.05.2014 08:16
von Waldixxl
Hallo Makke
Einfach mit WindowHeight(),WindowWidth(), WindowX() und WindowY() vorher abfragen, merken
und auf das Event warten.
Walter
Re: WindowEvent Maximize, wie die Ursprungsgröße speichern
Verfasst: 03.05.2014 12:56
von STARGÅTE
Ich mache es so, wenn die Anwendung geschlossen wird:
Code: Alles auswählen
HideWindow(#Window, #True) ; scheinbar das Fenster schließen
SetWindowState(#Window, #PB_Window_Normal) ; auf Normal größe setzen
X = WindowX(#Window) ; abfragen
Y = ...
Re: WindowEvent Maximize, wie die Ursprungsgröße speichern
Verfasst: 03.05.2014 13:01
von ts-soft
Ich mache es anders
Ich bestücke Variablen bei jedem relevantem Event und nutze diese Werte beim beenden, ansonsten
sieht man das Verstecken und Resizen am Ende, ist sehr unschön.
Natürlich nur wenn der WindowsState Normal ist.
Code: Alles auswählen
EnableExplicit
Global normal_x = #PB_Ignore, normal_y = #PB_Ignore, normal_width = 640, normal_hight = 480
Procedure WinMove()
If GetWindowState(0) = #PB_Window_Normal
normal_width = WindowWidth(0)
normal_hight = WindowHeight(0)
EndIf
; ...
EndProcedure
Procedure WinSize()
If GetWindowState(0) = #PB_Window_Normal
normal_x = WindowX(0)
normal_y = WindowY(0)
EndIf
; ...
EndProcedure
#winflags = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget
OpenWindow(0, normal_x, normal_y, normal_width, normal_hight, "", #winflags)
BindEvent(#PB_Event_MoveWindow, @WinMove(), 0)
BindEvent(#PB_Event_SizeWindow, @WinSize(), 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : Break
EndSelect
ForEver
Debug GetWindowState(0)
Debug normal_x
Debug normal_y
Debug normal_width
Debug normal_hight
Re: WindowEvent Maximize, wie die Ursprungsgröße speichern
Verfasst: 15.05.2014 19:39
von Makke
Hallo,
erstmal danke für Eure Antworten.
@ts-soft und waldixxl: das funktioniert so leider nicht, da ja der Event Maximize nach dem Event Size kommt
@stargate: danke, das ist eine interessanter "workaround"
Re: WindowEvent Maximize, wie die Ursprungsgröße speichern
Verfasst: 15.05.2014 20:09
von Makke
Ups, gehört sich eigentlich nicht auf die eigene Antwort zu antworten, aber mir ist gerade aufgefallen, das Xubuntu 14.04 (LTS) den Maximize Event anscheinend nicht richtig verarbeitet.
Könnt Ihr bestätigen, das bei folgendem Code:
Code: Alles auswählen
If OpenWindow(0, 0, 0 , 800, 600, "Test", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
Repeat
Debug GetWindowState(0)
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Der Event Minimize 1024 ist, der Event Normal oder Maximize jedoch 0 ?
Re: WindowEvent Maximize, wie die Ursprungsgröße speichern
Verfasst: 15.05.2014 21:03
von ts-soft
Makke hat geschrieben:@ts-soft und waldixxl: das funktioniert so leider nicht, da ja der Event Maximize nach dem Event Size kommt
Deswegen wird doch der State überprüft, bei mir funktioniert es jedenfalls in vielen Programmen

Re: WindowEvent Maximize, wie die Ursprungsgröße speichern
Verfasst: 18.05.2014 19:38
von Makke
ts-soft hat geschrieben:Deswegen wird doch der State überprüft, bei mir funktioniert es jedenfalls in vielen Programmen

U. U. liegt das evtl. an meiner Linux Version. Hier kommt erst der Event "Resize", der Status des Fensters ist dann aber noch "Normal", da der "Maximize" Event erst danach kommt und auch dann hat das Fenster erst den Status "Maximiert".
Ich habe das aber jetzt wie folgt gelöst:
Code: Alles auswählen
Enumeration
#MyWindow
EndEnumeration
define.l width, height
gtk_window_get_size_(WindowID(#MyWindow), @width, @height)
GTK speichert die ursprüngliche Größe ab und gibt sie (zumindest bei mir) so zurück.