Seite 2 von 2

Re: Event Handling mehrere Windows

Verfasst: 10.06.2015 11:27
von HeX0R
Siehe hier.
Und speziell meine Antwort hier

Re: Event Handling mehrere Windows

Verfasst: 10.06.2015 11:36
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.

Re: Event Handling mehrere Windows

Verfasst: 10.06.2015 12:20
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

Re: Event Handling mehrere Windows

Verfasst: 10.06.2015 12:24
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.

Re: Event Handling mehrere Windows

Verfasst: 10.06.2015 18:04
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.

Re: Event Handling mehrere Windows

Verfasst: 10.06.2015 18:12
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 :)

Re: Event Handling mehrere Windows

Verfasst: 10.06.2015 20:41
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.

Re: Event Handling mehrere Windows

Verfasst: 10.06.2015 21:26
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.