IsWindow() defekt?

Anfängerfragen zum Programmieren mit PureBasic.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

IsWindow() defekt?

Beitrag von stevie1401 »

Im folgenden Beispiel hatte ich erwartet, dass die Variable Win2 nach einem Closewindow(win2) wieder auf 0 ist und ich mit IsWindow(win2) herausfinden kann, ob das Fenster existiert.
Dem ist leider nicht so.
Getestet mit Linux 5.24/31 x86,64 und Windows 5.24/31 x86,64

Code: Alles auswählen


EnableExplicit

Define win1,win2,quit,event


;: Mal schnell ein Fenster gezimmert....
win1=OpenWindow(#PB_Any, 0, 0, 640, 480, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)

;: noch ein "Button" drauf...
ButtonGadget(1, 20, 20, 200, 25, "Fenster 2 öffnen")

;: und nun die Abfragerei
Repeat
  
  Event = WaitWindowEvent() ; <- Hier das WindowEvent einer Variablen zugewiesen
  
  Select Event ; > <- Hier wird dann sozusagen "verzweigt"
      
    Case #PB_Event_CloseWindow ; Hier wird ein Fenster Schliess Button gedrückt
      Quit = 1 ; Hier um die Repeat Schleife zu verlassen....

    Case #PB_Event_Gadget ; Hier kam ein "Event" von einem Gadget
      
      If EventGadget() = 1 ; Wenn es unser Button war dann Text raus
        If IsWindow(win2)=0
          win2=OpenWindow(#PB_Any, 0, 0, 640, 480, "Fenster 2  (ID:"+Str(win2)+")", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
          SetGadgetText(1,"Fenster2 schliessen")
        Else
          CloseWindow(win2)  ;hier sollte win2 wieder 0 werden
          SetGadgetText(1,"Fenster2 erneut öffnen (Win2 ID: "+Str(win2)+")")
        EndIf
        
      EndIf
      
  EndSelect
  
Until Quit > 0
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: IsWindow() defekt?

Beitrag von Kiffi »

Dein Code funktioniert wie erwartet.

win2 wird durch Dein CloseWindow(win2) natürlich nicht verändert.

Und IsWindow(win2) liefert nach dem Schliessen des Fensters auch das richtige Ergebnis (=0).

Grüße ... Peter
a²+b²=mc²
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: IsWindow() defekt?

Beitrag von stevie1401 »

Stimmt, da hab ich mich verschrieben, win2 bleibt win2, auch wenn das Fenster geschlossen ist.
Allerdings kann ich das NICHT bestätigen, was du schreibst.
Nachdem ich win2 mit Closewindow(win2) geschlossen habe, gibt mir ein IsWindow(win2) die alte ID von Fenster 2, NICHT 0, wie es eigentlich sein sollte.

Unter welchem Betriebssystem und welchem PB funktioniert es denn?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: IsWindow() defekt?

Beitrag von NicTheQuick »

Unter Ubuntu Gnome 14.04 x64 funktioniert alles korrekt mit PB V 5.30 x64.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: IsWindow() defekt?

Beitrag von Kiffi »

stevie1401 hat geschrieben:Unter welchem Betriebssystem und welchem PB funktioniert es denn?
Windows 7 prof. / PB5.31 (32 und 64bit)

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: IsWindow() defekt?

Beitrag von Bisonte »

stevie1401 hat geschrieben:Unter welchem Betriebssystem und welchem PB funktioniert es denn?
Unter jedem. IsWindow(win2) ist gleich 0, wenn das Fenster aktuell nicht vorhanden ist.
Es spielt keine Rolle was win2 für einen Wert hat. Solange die Variable KEIN GÜLTIGES Fenster
repräsentiert, gibt die Funktion IsWindow() ein #False (oder 0) zurück. Die Variable wird dadurch
nicht geändert und hat nach wie vor den gleichen Wert !

Also Kiffi's Aussage mit anderen (oder doch nicht anderen) Worten.... ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: IsWindow() defekt?

Beitrag von stevie1401 »

Hm, wenn es bei euch allen funktioniert und bei mir nicht, kann es eigentlich nur ein Hardwarefehler bei mir sein.
Fehlende Pakete unter Linux schließe ich aus, da es bei mir ja auch nicht unter Windows geht.
Ich habe mir nun so beholfen, dass ich bei jedem CloseWindow(WinX) die dazugehörende Variable WinX nulle und dann nicht mehr nach IsWindow() abfrage, sondern, ob die Variable WinX NULL ist. Das wiederum funktioniert wunderbar.
Danke euch für eure Hilfe. :allright:
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: IsWindow() defekt?

Beitrag von NicTheQuick »

Ich kann das immer noch nicht so richtig nachvollziehen. 'IsWindow()' ist ein so uralter Befehl. Das wäre komisch, wenn es da einen Bug gäbe in irgendeiner Konfiguration. Das hat auch nichts mit Hardware zu tun. Das ist reine Softwaresache. Verhalten sich Befehle wie 'IsGadget()' oder 'IsImage()', usw. auch so komisch bei dir?
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: IsWindow() defekt?

Beitrag von stevie1401 »

Verhalten sich Befehle wie 'IsGadget()' oder 'IsImage()', usw. auch so komisch bei dir?
Ja, manchmal zumindest, Mal werden die Abragen korrekt gemacht, manchmal werden diese Abragen schlicht ignoriert.
Und ich wunderte mich, warum meine PB-Clients alle so wackelig laufen. Nun weiß ich es.
Die bei mir compilierte Software läuft übrigens auch bei anderen auf deren Rechnern dann "wackelig".
Nachvollziehbar ist das alles für mich nicht.
Da ich jetzt die Variablen NULLE, und die Variablen abfrage, geht es jetzt aber alles wie geschmiert.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Antworten