WindowEvent Maximize, wie die Ursprungsgröße speichern

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

WindowEvent Maximize, wie die Ursprungsgröße speichern

Beitrag 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.
---
Windows 11 (64 bit)
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Re: WindowEvent Maximize, wie die Ursprungsgröße speichern

Beitrag von Waldixxl »

Hallo Makke

Einfach mit WindowHeight(),WindowWidth(), WindowX() und WindowY() vorher abfragen, merken
und auf das Event warten.
Walter
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.

Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: WindowEvent Maximize, wie die Ursprungsgröße speichern

Beitrag 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 = ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: WindowEvent Maximize, wie die Ursprungsgröße speichern

Beitrag von ts-soft »

Ich mache es anders :mrgreen:
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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: WindowEvent Maximize, wie die Ursprungsgröße speichern

Beitrag 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"
---
Windows 11 (64 bit)
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: WindowEvent Maximize, wie die Ursprungsgröße speichern

Beitrag 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 ?
---
Windows 11 (64 bit)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: WindowEvent Maximize, wie die Ursprungsgröße speichern

Beitrag 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 <)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: WindowEvent Maximize, wie die Ursprungsgröße speichern

Beitrag 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.
---
Windows 11 (64 bit)
Antworten