Überprüfen, ob ein Window minimiert wurde?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Nicht in der Repeatschleife, sondern nach einem #PB_Event_MoveWindow (oder war es nach einem #PB_Event_SizeWindow ? *grübel*)

Und die zweite Frage, die so gar nix mit der ersten zutun hat:
Nimm Fragezeichen anstatt Klammeraffen...
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Danke @all, die mitgeholfen haben!

Funzt jetzt alles!
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@HeX0R
Nicht in der Repeatschleife, sondern nach einem #PB_Event_MoveWindow (oder war es nach einem #PB_Event_SizeWindow ? *grübel*
:?
#PB_Event_MoveWindow = Wird ermittelt, ob das Fenster verschoben wurde
#PB_Event_SizeWindow = Wird ermittelt, ob die Größe des Fensters geändert wurde.

Also #PB_Window_Minimize ist schon richtig, diese Variante benutze ich schon lange und funktioniert immer.

@Edit:
Na egal, das Problem wurde sowieso behoben :mrgreen:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Nochmal ne Frage: Wie ist das, wenn das Window wiederhergestellt wurde? Habe schon was mit #pb_window_normal versucht, will aber irgendwie nicht so wirklich fruchten...
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

RSBasic hat geschrieben:@HeX0R
Nicht in der Repeatschleife, sondern nach einem #PB_Event_MoveWindow (oder war es nach einem #PB_Event_SizeWindow ? *grübel*
:?
#PB_Event_MoveWindow = Wird ermittelt, ob das Fenster verschoben wurde
#PB_Event_SizeWindow = Wird ermittelt, ob die Größe des Fensters geändert wurde.

Also #PB_Window_Minimize ist schon richtig, diese Variante benutze ich schon lange und funktioniert immer.
Extra für dich, hab ich es etwas veranschaulicht:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 100, 100, "", #PB_Window_MinimizeGadget)
	Repeat
		Select WaitWindowEvent()
			Case #PB_Event_CloseWindow
				Break
			Case #PB_Event_MoveWindow
				If GetWindowState(0) & #PB_Window_Minimize
					Debug "Minimiert"
				EndIf
		EndSelect
	ForEver
EndIf
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

//edit: Ich hab's geschafft. :lol:
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@PureBasic4.0
Sehr gut :allright:

@HeX0R
>Extra für dich, hab ich es etwas veranschaulicht:
Sehr nett von dir, danke :mrgreen:

Kann man auch, aber ich hab eigentlich immer so gemacht und hab trotzdem keine Probleme:

Code: Alles auswählen

If OpenWindow(0,0,0,100,100,"testwindow",#PB_Window_MinimizeGadget) 
 Repeat 
   EventID=WaitWindowEvent()
   If GetWindowState(0)=#PB_Window_Minimize 
     Debug "Minimiert" 
  EndIf
  If EventID = #PB_Event_CloseWindow
    Quit=1
  EndIf
Until Quit=1
EndIf
Na ok, es kann sein dass dein Beispiel-Code besser ist, weil du nur ein Event zurückbekommst.
Man kann so oder so machen :)
Na ok
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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

Beitrag von ts-soft »

>> Man kann so oder so machen
Aber nur wenn man sein Programm umbedingt verlangsamen möchte :mrgreen:
Keinen Code ausserhalb eines dafür vorgesehenen Ereignisses!
Wenn z.B. bei jedem überfahren eines Controlls mit der Maus
GetWindowState() ausgeführt wird, ist das schon sehr unschön :mrgreen:
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Keinen Code ausserhalb eines dafür vorgesehenen Ereignisses!

sehr richtig und absolut wichtig.


und noch ein hinweis:

Code: Alles auswählen

			Case #PB_Event_MoveWindow
				If GetWindowState(0) & #PB_Window_Minimize
					Debug "Minimiert"
				EndIf
unter Windows ist das korrespondierende ereignis #PB_Event_MoveWindow, wie hier gezeigt.

unter Linux muss man auf #PB_Event_SizeWindow reagieren.
die beiden OS handlen das minimieren unterschiedlich.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@HeX0R & @ts-soft & @Kaeru Gaman
OK, das habe ich nicht gewusst.
Ich habs immer so programmiert, wenn ich mein Programm in die Systray beim Minimieren reinmachen wollte.
Es kam keine Fehlermeldungen, kein Performanceverlust entdeckt und daher war alles Schick für mich.
Ich kanns ja nachher, wenn ich an WT, SoT, AT, QS, 2DMEPB, QFM oder/und CAT weiter progge, wieder ändern :wink:

Danke für den Tipp :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten