Event Handling mehrere Windows

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
HeX0R
Beiträge: 3070
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:

Re: Event Handling mehrere Windows

Beitrag von HeX0R »

Siehe hier.
Und speziell meine Antwort hier
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Event Handling mehrere Windows

Beitrag von matbal »

ts-soft hat geschrieben:Bei einem EventGadget() wird nicht unbedingt ein EventWindow() mit dem richtigem Fenster gefeuert!
Glücklicherweise wird immer das richtige Fenster mitgegeben - zumindest zu allen PB_Events. Sonst hätten viele meiner Programme nicht richtig funktionieren dürfen. Ich habe auch lange Zeit im Event-Loop den Code nach EventWindow aufgeteilt und in Prozeduren ausgelagert.
TWELVE
Beiträge: 72
Registriert: 01.04.2007 18:33

Re: Event Handling mehrere Windows

Beitrag von TWELVE »

Bin gerade unterwegs, aber Matbals Erklärung scheint mir ein ganz heißer Tip zu sein, werde dem nachher mal nachgehen.Soweit ich überflogen hab, hat HeX0R den gleichen Gedanken.
.Danke Euch bis später
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: Event Handling mehrere Windows

Beitrag von ts-soft »

Warum versteckst Du die Fenster nicht, statt jedesmal Neuaufzubauen, mit neuem Variablenwert usw.
Bei langsamen PCs sollte es auch besser aussehen, jedenfalls wenn die Fenster sehr aufwendig sind.
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
TWELVE
Beiträge: 72
Registriert: 01.04.2007 18:33

Re: Event Handling mehrere Windows

Beitrag von TWELVE »

ts-soft hat geschrieben:Warum versteckst Du die Fenster nicht, statt jedesmal Neuaufzubauen, mit neuem Variablenwert usw.
Bei langsamen PCs sollte es auch besser aussehen, jedenfalls wenn die Fenster sehr aufwendig sind.
Ich mache dies aktuell mit einem Fenster, das hat nur den Grund, dass ich aus einem Thread kein OpenWindow
machen darf.Da ich noch keine coole Lösung dafür hab, löse ich es derzeit mit HideWindow().
Allerdings sieht man beim Start, wie sich das Window aufbaut und dann verschwindet.Das gefällt mir nicht.
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: Event Handling mehrere Windows

Beitrag von ts-soft »

Wie wäre es mit: OpenWindow(......, #PB_Window_Invisible) ?
Ich würde alle Fenster öffnen und entsprechend verstecken und schon sieht man nirgends mehr wie ein Fenster sich aufbaut :)
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
TWELVE
Beiträge: 72
Registriert: 01.04.2007 18:33

Re: Event Handling mehrere Windows

Beitrag von TWELVE »

matbal hat geschrieben: Wenn du für die Fenster dynamische Nummern erzeugst, mußt du selber dafür sorgen, daß beim Schließen eines Fensters auch die Window-Variable zurückgesetzt wird.

Dieselbe freigewordene Window-Nummer könnte nämlich das als nächstes geöffnete Fenster bekommen. Setzt du die Variablen nicht zurück, hast du dann zwei Variablen mit der gleichen Nummer, und deine Event-Verarbeitung klappt nicht mehr.
HeX0R hat geschrieben:Siehe hier.
Und speziell meine Antwort hier
Genau das wars !

Ich setze jetzt die Window Variable auf 0, wenn das Window geschlossen wird, damit geht's einwandfrei.

Code: Alles auswählen

Procedure RNotes_Events(Event, Window)

  Select event 
      
                         
       Case #PB_Event_Gadget
         
         Select EventGadget()
             
           Case Button_8
           DisableWindow(Main, 0)
           CloseWindow(RNotes)
           RNotes = 0
    
       
 
        EndSelect  
         
 EndSelect
 
EndProcedure   
Warum mache ich das so mit der Variable und den Events...das ist im Prinzip der Code, den der integrierte FormDesigner rauswirft.
Der benennt die Window Variable immer nach dem Fensternamen.

Danke an Euch für den entscheidenden Hinweis !

ts-soft hat geschrieben:Wie wäre es mit: OpenWindow(......, #PB_Window_Invisible) ?
Ich würde alle Fenster öffnen und entsprechend verstecken und schon sieht man nirgends mehr wie ein Fenster sich aufbaut :)
Dir auch Danke...Gute Idee ! Das Flag hatte ich irgendwie bisher übersehen ;-)

Ich wollte natürlich hier jetzt wissen, wo der Denkfehler ist.Oft kann man irgendeinen Workaround finden,
aber immer schlecht, wenn man fehlerhaften Code weiter mitschleppt.
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Event Handling mehrere Windows

Beitrag von matbal »

TWELVE hat geschrieben:Warum mache ich das so mit der Variable und den Events...das ist im Prinzip der Code, den der integrierte FormDesigner rauswirft.
Der benennt die Window Variable immer nach dem Fensternamen.
Das läßt sich in der IDE auch auf Konstanten Umschalten:
  • Datei => Einstellungen => Form
    hier von "Neue Gadgets verwenden standardmäßig #Pb_Any" das Häkchen entfernen
Auch im Formdesigner in den Properties ganz oben gibt es eine Checkbox "#Pb_Any", wo das für jedes Element einzeln umgeschaltet werden kann.

Für Fenster, die es im Programm nur einmal gibt, braucht man kein #Pb_Any, die funktionieren auch mit Konstanten.
Antworten