Seite 1 von 1

Wie funktioniert ein Child Fenster?

Verfasst: 17.12.2006 11:14
von GreyEnt
Hallo NG,
hab wiedereinmal ein "nichtweiterkommen Ereignis" :(
Und zwar möchte ich ein zweites Fenster öffnen.
Aber mein Beispiel hört mit der Meldung auf.
"There is no current Gadgetlist"

Gibt es eine einfache Lösung für mich?
Danke schonmal im vorraus. Und einen schönen Sonntag noch.
Dieter

Code: Alles auswählen

;Beispiel Child Fenster
;geschrieben in PureBasic 4.00
;-----------------------------

OpenWindow(0, 20, 20, 480, 320,"Parent Fenster", #PB_Window_SystemMenu)
CreateMenu(0, WindowID(0))
MenuTitle("Datei")
MenuItem(1,"Neues Fenster")

Repeat
	Ereignis = WaitWindowEvent()
	Select Ereignis
		Case #PB_Event_Menu
 			Select EventMenu()
 				Case 1                  ;CreateMenu "Neues Fenster"
 				OpenWindow(2, 10, 10, 200, 200,"Child Fenster",#PB_Window_SystemMenu)
				EditorGadget(0,15,15, 150,150,#PB_Editor_ReadOnly)
				AddGadgetItem(0,1,"Tuts nicht :(") 
				Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  		EndSelect ;Ende Event_Menu
  EndSelect ;Ende Ereignis
Until Ereignis = #PB_Event_CloseWindow 
End

Verfasst: 17.12.2006 11:20
von edel
du hast CreateGadgetList vergessen :

Code: Alles auswählen

;Beispiel Child Fenster
;geschrieben in PureBasic 4.00
;-----------------------------

OpenWindow(0, 20, 20, 480, 320,"Parent Fenster", #PB_Window_SystemMenu)
CreateMenu(0, WindowID(0))
MenuTitle("Datei")
MenuItem(1,"Neues Fenster")

Repeat
  Ereignis = WaitWindowEvent()
  Select Ereignis
    Case #PB_Event_Menu
      Select EventMenu()
        Case 1                  ;CreateMenu "Neues Fenster"
          OpenWindow(2, 10, 10, 200, 200,"Child Fenster",#PB_Window_SystemMenu)
          CreateGadgetList(WindowID(2)) ; <--------------
          EditorGadget(0,15,15, 150,150,#PB_Editor_ReadOnly)
          AddGadgetItem(0,1,"Tuts doch :)")
          Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
      EndSelect ;Ende Event_Menu
  EndSelect ;Ende Ereignis
Until Ereignis = #PB_Event_CloseWindow
End 
Deine Eventschleife ist auch etwas vermurkst. Beim schliessen des Child
Fensters verlaesst du die Eventschleife, was zum beenden des Programmes
fuehrt.

Nur ein WaitWindowEvent() pro Schleife (aussgenommen Threads)
egal wieviel Fenster man hat.

so geht es :

Code: Alles auswählen

;Beispiel Child Fenster
;geschrieben in PureBasic 4.00
;-----------------------------

OpenWindow(0, 20, 20, 480, 320,"Parent Fenster", #PB_Window_SystemMenu)
CreateMenu(0, WindowID(0))
MenuTitle("Datei")
MenuItem(1,"Neues Fenster")

Repeat
  Ereignis = WaitWindowEvent()
  Select Ereignis
    Case #PB_Event_Menu
      Select EventMenu()
        Case 1                  ;CreateMenu "Neues Fenster"
          OpenWindow(2, 10, 10, 200, 200,"Child Fenster",#PB_Window_SystemMenu)
          CreateGadgetList(WindowID(2))
          EditorGadget(0,15,15, 150,150,#PB_Editor_ReadOnly)
          AddGadgetItem(0,1,"Tuts doch :)") 
      EndSelect ;Ende Event_Menu
    Case #PB_Event_CloseWindow ;<----
      Select EventWindow();<----
        Case 2;<----
        CloseWindow(2) ;<--- child fenster schliessen
        Case 0;<----
          Break ; <--- schleife verlasssen
      EndSelect;<----
  EndSelect ;Ende Ereignis
ForEver;<----
End 

Verfasst: 17.12.2006 11:28
von GreyEnt
Hallo edel,

von CreateGadgetList wuste ich nichts. Sorry.

Aber nun funktioniert es.
Ich schmeiß ne Party. :)

Nun ist die sache mit dem Beenden des Child Fensters.
Wie kann ich es beenden ohne das das Hauptfenster zugeht?

Verfasst: 17.12.2006 11:34
von edel
Hab es oben schon geschrieben aber hier nochmal vereinfacht :

Code: Alles auswählen

  Enumeration
    #MainWindow
    #ChildWindow
  EndEnumeration
  
  
  hwnd_main  = OpenWindow(#MainWindow,0,0,200,200,"MAIN")
  hwnd_child = OpenWindow(#ChildWindow,205,0,200,200,"CHILD",#PB_Window_SystemMenu,hwnd_main)
  
  Repeat
    event     = WaitWindowEvent()
    eventwin  = EventWindow()
    
    Select event
      Case #PB_Event_CloseWindow
        
        If eventwin = #MainWindow
          quit = #True
        ElseIf eventwin = #ChildWindow
          CloseWindow(#ChildWindow)
        EndIf
        
    EndSelect
    
  Until quit = #True ; solange laufen lassen bis quit = #true ist.

Verfasst: 17.12.2006 11:38
von GreyEnt
ich glaube, nun hab ich es verstanden.

nochmal danke.