Aktuelle Zeit: 11.07.2020 19:21

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Gelöst! Problem mit "There is no current GadgetList"
BeitragVerfasst: 15.07.2019 22:19 
Offline

Registriert: 06.03.2019 21:52
Hallo!

Brauche Eure Ideen, wo ich den Fehler suchen muss! Mein Proggi vergrößert per Buttonklick das Fenster und zeigt ein ListIconGadget mit allen Feiertagen eines Jahres. Mit weiterem Buttonklick verschwindet das ListIconGadget und das Fenster wird wieder verkleinert (Resizewindow). Dabei wird das ListIconGadget per Freegadget gelöscht und bei einem Wiederanzeigen neu erstellt.
Kann man hundertmal auf und zuklappen - funktioniert.

Dann kann ein Childwindow geöffnet werden. Wenn das Childwindow wieder geschlossen wird [mittels DisableWindow(parentwindow, #False) und CloseWindow(childwindow)], kann das ListIconGadget nicht mehr angezeigt werden, stattdessen erhalte ich den Fehler "There is no current GadgetList". Wie erhalte ich meine Gadgetlist wieder?

_________________
Der beste Fisch ist der Schnitzel


Zuletzt geändert von bin_neu_hier am 17.07.2019 16:39, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit "There is no current GadgetList"
BeitragVerfasst: 15.07.2019 22:21 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
UseGadgetList() könnte helfen.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit "There is no current GadgetList"
BeitragVerfasst: 15.07.2019 23:56 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Sobald du ein Fenster öffnest, wird die "CurrentGadgetlist" auf das neue Fenster gesetzt. Völlig automatisch.
Wenn man versucht, nach dem Schliessen des zuletzt erstellten Fensters wieder ein Gadget zu erstellen, schägt es fehl, weil das Fenster
nun ja nicht mehr existiert.

Dann hört man auf RSBasic und verwendet : UseGadgetList() ;)

In der PB-Hilfe (F1) ist auch ein Beispiel, das erklärt, wie es dann funktioniert.

_________________
PureBasic 5.72 LTS (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce RTX 2080 Super | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gelöst! Problem mit "There is no current GadgetList"
BeitragVerfasst: 17.07.2019 16:52 
Offline

Registriert: 06.03.2019 21:52
@RSBAsic @Bisonte: Ja, das war's! Besten Dank für die schnelle Hilfe!

Trotzdem eine Frage noch dazu:
Ich habe in meinem Programm eine Art Messagerequester eingebaut, der mittels Childwindow Informationen ausgibt und den Programmablauf anhält, bis einer von 3 möglichen Antwortbuttons angeklickt wird. Bisher hatte ich im Childwindow eine eigene Eventschleife mit WaitWindowEvent() und If Eventwindow = xyz. Ist das so die sichere Art und Weise? Oder ist es besser/stabiler/sicherer/richtiger, nur eine einzige Eventschleife in einem Pro zu haben?

Das hatte ich ursprünglich versucht, doch irgendwie abe ich es nicht geschafft, den Programmablauf so lange zu blockieren, bis eine Entscheidung feststeht. Gibt es eine "Wait until bestimmtes Event"-Funktion außer der Eventschleife?

Reicht es aus, die Gadgetlist in einer Variablen zu speichern, die o.g. 3 Buttons hinzufügen und anschließend die ursprüngliche Gadgetlist wiederherzustellen?

_________________
Der beste Fisch ist der Schnitzel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gelöst! Problem mit "There is no current GadgetList"
BeitragVerfasst: 17.07.2019 17:00 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
bin_neu_hier hat geschrieben:
Oder ist es besser/stabiler/sicherer/richtiger, nur eine einzige Eventschleife in einem Pro zu haben?

Eine Eventschleife reicht. Dank BindEvent kannst du das auch gut in Prozeduren auslagern, so dass deine Eventschleife nur aus folgendem Code besteht:
Code:
Repeat : WaitWindowEvent() : ForEver


bin_neu_hier hat geschrieben:
Das hatte ich ursprünglich versucht, doch irgendwie abe ich es nicht geschafft, den Programmablauf so lange zu blockieren, bis eine Entscheidung feststeht. Gibt es eine "Wait until bestimmtes Event"-Funktion außer der Eventschleife?

Die Eventschleife währenddessen zu blocken, ist nie eine gute Idee. Was du meinst, sind modale Dialoge, so dass man erst das Sub-Fenster wegklicken muss, bevor man mit dem Haupt-Fenster weiterarbeiten kann oder?
Das kannst du mit ParentWindow und DisableWindow umsetzen.
Beispiel:
Code:
EnableExplicit

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
  If OpenWindow(1, 0, 0, 400, 300, "SubWindow", #PB_Window_SystemMenu | #PB_Window_WindowCentered, WindowID(0))
    DisableWindow(0, 1)
   
  EndIf
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf


In meinem Beispielcode fehlt natürlich noch die Eventabfrage, welches Fenster geschlossen werden soll, aber es soll in diesem Fall nur zeigen, wie du modale Fenster erstellen kannst.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gelöst! Problem mit "There is no current GadgetList"
BeitragVerfasst: 17.07.2019 18:45 
Offline

Registriert: 06.03.2019 21:52
Hi!

Ja, soweit kann ich (glaube ich) folgen. Hier ein Beispiel, das mein Problem zeigt:

Code:
Global parentwindow, childwindow, oldgadgetlist
Global dialogbutton, cw_button1, cw_button2 

Procedure dialog_OK()
  DisableWindow(parentwindow, #True)
  oldgadgetlist = UseGadgetList(WindowID(parentwindow))
  childwindow = OpenWindow(#PB_Any, 0,0,200,200, "", #PB_Window_SystemMenu|#PB_Window_WindowCentered, WindowID(parentwindow))
  cw_button1 = ButtonGadget(#PB_Any, 0,0,50,25, "Jep!")
  cw_button2 = ButtonGadget(#PB_Any, 60,0,50,25, "Nope!")
 
EndProcedure

parentwindow = OpenWindow(#PB_Any, 0, 0, 500, 500, "Parent", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
bg_openwindow = ButtonGadget(#PB_Any, 0, 0, 200, 25, "Child")

dialog_ok()
Debug dialogbutton

Repeat
  Event = WaitWindowEvent()
 
  Select Event
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case parentwindow
          End
         
        Case childwindow
          dialogbutton = 3
          CloseWindow(childwindow) : UseGadgetList(oldgadgetlist) : DisableWindow(parentwindow, #False)
         
      EndSelect
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case bg_openwindow
          DisableWindow(parentwindow, #True)
          oldgadgetlist = UseGadgetList(WindowID(parentwindow))
          childwindow = OpenWindow(#PB_Any, 0,0,200,200, "", #PB_Window_SystemMenu|#PB_Window_WindowCentered, WindowID(parentwindow))
          cw_button1 = ButtonGadget(#PB_Any, 0,0,50,25, "Jep!") : cw_button2 = ButtonGadget(#PB_Any, 60,0,50,25, "Nope!")
         
        Case cw_button1
          dialogbutton = 1
          CloseWindow(childwindow) : UseGadgetList(oldgadgetlist) : DisableWindow(parentwindow, #False)
         
        Case cw_button2
          dialogbutton = 2
          CloseWindow(childwindow) : UseGadgetList(oldgadgetlist) : DisableWindow(parentwindow, #False)
         
      EndSelect
  EndSelect
ForEver
End


Mein Prog kommt also irgendwann an den Punkt, das Childwindow zu öffnen und den User zu einer Antwort zu bewegen. Dabei wäre es erstmal egal, ob das Childwindow per Buttonclick oder per Aufruf mittels Procedure erzeugt wird.
Der Debug-Befehl zeigt dann die Stelle, wo je nach Userantwort verzweigt werden soll, aber die Variable "dialogbutton" wird offenbar schon ausgelesen, bevor ihr in der Eventschleife ein Wert zugewiesen wird. Ich bin aber davon ausgegangen, dass Childwindow als modales Fenster geöffnet und Parentwindow zu diesem Zeitpunkt disabled ist. Ich bin davon ausgegangen, dass da solange nix geht, bis das disabled aufgehoben ist.

Klar könnte ich das obige Beispiel auch mit einem Messagerequester machen, aber der ist mir zu unflexibel, was Anzahl Buttons und Darstellungsmöglichkeiten bietet. Wer hilt mir mal über die Straße?

_________________
Der beste Fisch ist der Schnitzel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gelöst! Problem mit "There is no current GadgetList"
BeitragVerfasst: 18.07.2019 07:55 
Offline

Registriert: 29.05.2010 20:55
HTH

Code:
EnableExplicit

Global parentwindow, childwindow, oldgadgetlist
Global cw_button1, cw_button2
Define bg_openwindow, Event

#Ja = "Jep!"
#Nein = "Nope!"

Procedure dialog_OK()
  DisableWindow(parentwindow, #True)
  oldgadgetlist = UseGadgetList(WindowID(parentwindow))
  childwindow = OpenWindow(#PB_Any, 0,0,200,200, "", #PB_Window_SystemMenu|#PB_Window_WindowCentered, WindowID(parentwindow))
  cw_button1 = ButtonGadget(#PB_Any, 0,0,50,25, #Ja)
  cw_button2 = ButtonGadget(#PB_Any, 60,0,50,25, #Nein)
EndProcedure

Procedure dialog_OK_reslut(result$ = "")
  If result$ = #Ja
    Debug "Ja"
  ElseIf result$ = #Nein
    Debug "Nein"
  Else
    Debug "Fenster geschlossen"
  EndIf
EndProcedure

parentwindow = OpenWindow(#PB_Any, 0, 0, 500, 500, "Parent", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
bg_openwindow = ButtonGadget(#PB_Any, 0, 0, 200, 25, "Child")

dialog_ok()

Repeat
  Event = WaitWindowEvent()
 
  Select Event
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case parentwindow
          End
         
        Case childwindow
          CloseWindow(childwindow) : UseGadgetList(oldgadgetlist) : DisableWindow(parentwindow, #False)
          dialog_OK_reslut()
         
      EndSelect
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case bg_openwindow
          DisableWindow(parentwindow, #True)
          oldgadgetlist = UseGadgetList(WindowID(parentwindow))
          childwindow = OpenWindow(#PB_Any, 0,0,200,200, "", #PB_Window_SystemMenu|#PB_Window_WindowCentered, WindowID(parentwindow))
          cw_button1 = ButtonGadget(#PB_Any, 0,0,50,25, "Jep!") : cw_button2 = ButtonGadget(#PB_Any, 60,0,50,25, "Nope!")
         
        Case cw_button1
          CloseWindow(childwindow) : UseGadgetList(oldgadgetlist) : DisableWindow(parentwindow, #False)
          dialog_OK_reslut(#Ja)
         
        Case cw_button2
          CloseWindow(childwindow) : UseGadgetList(oldgadgetlist) : DisableWindow(parentwindow, #False)
          dialog_OK_reslut(#Nein)
         
      EndSelect
  EndSelect
ForEver
End


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Google Adsense [Bot] und 12 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye