2. Window öffnet nur 1 mal - warum?

Anfängerfragen zum Programmieren mit PureBasic.
dakotawolf
Beiträge: 7
Registriert: 13.05.2007 11:33
Wohnort: beim größten Kuppeldom in D

2. Window öffnet nur 1 mal - warum?

Beitrag von dakotawolf »

Hi, noch ne Frage - als PB-Anfänger hat man es nicht leicht...

Habe ein kleines Testprogramm geschrieben um mich mit Fenstern und Panels vertraut zu machen. Das ganze funzt aber nur einmal...

Code: Alles auswählen

; ##### Fenster-Test / 2. Fenster (mit button3) öffnet nur 1 mal - warum? ###
; ##### Schließkreuz muß ich auch 2 mal drücken, bevor es schließt ######
; ##### habe in dem Fenster eine eigene Repeatschleife - ist das ok? ######
Procedure fenster2()
If OpenWindow(1, 0, 0, 250, 105, "hier Fenster 2 - das war Button No 3...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    DisableWindow(0,1)  
    SetWindowColor(1, $66ffff) 
    If CreateGadgetList(WindowID(1)) 
          ButtonGadget(6, 10, 15, 150, 30, "Test button")
    EndIf  
    Repeat
        Event.l = WaitWindowEvent(500)
        Select Event
        Case #PB_Event_Gadget
                                  Select EventGadget()
                                      Case 6
                                       DisableWindow(0,0)
                                       ; SetActiveWindow(0) - nicht nötig, oder?
                                       CloseWindow(1)
                                   EndSelect 
        EndSelect    
    Until event = #PB_Event_CloseWindow
 EndIf
EndProcedure

; ##### Fenster und Panel erzeugen #####
If OpenWindow(0, 0, 0, 622, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    PanelGadget     (0, 8, 8, 606, 203)
      AddGadgetItem (0, -1, "Panel 1")
        ButtonGadget(4, 10, 15, 80, 24,"Button 4")        
      AddGadgetItem (0, -1,"Panel 2")
        ButtonGadget(2, 10, 15, 80, 24,"Button 2")
        ButtonGadget(3, 95, 15, 80, 24,"Button 3")
      AddGadgetItem (0, -1,"Panel 3") 
        ListViewGadget(5, 30, 30, 280, 60)  
        
; ##### Hauptschleife #####
    Repeat 
    Event.l = WaitWindowEvent(500)
    Select Event      
    Case #PB_Event_Gadget
                                  Select EventGadget()
                                     Case 4 ; nicht wichtig
                                     MessageRequester("hi", "das war Button 4")
                                     Case 3 ; öffnet 2. Fenster
                                     fenster2()
                                     Case 2 ; bisschen Spielerei
                                     MessageRequester("hi", "Danke für Deine Hilfe...")
                                     DisableGadget(4,1)
                                     AddGadgetItem(5, -1, "hier steht jetzt Text")
                                  EndSelect     
    EndSelect      
    Until event = #PB_Event_CloseWindow
  EndIf

Danke für Eure Zeit!
Carpe Diem
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: 2. Window öffnet nur 1 mal - warum?

Beitrag von Kiffi »

Hallo dakotawolf,

auch für mehrere Fenster benötigst Du nur eine Event-Schleife (es sei
denn, Du öffnest ein Fenster in einem Thread, was bei Dir aber nicht der
Fall ist). Du solltest dann lediglich (wie am Beispiel #PB_Event_CloseWindow)
darauf achten, von welchem Fenster das Event kommt und entsprechend
darauf reagieren. Nachfolgend mal ein abgespecktes Codebeispiel, anhand
dessen Du die Vorgehensweise studieren kannst:

Code: Alles auswählen

Enumeration ; Fenster
  #fenster1
  #fenster2
EndEnumeration

Enumeration ; Gadgets
  #oeffnefenster2
EndEnumeration

Procedure fenster1()
  OpenWindow(#fenster1, #PB_Ignore, #PB_Ignore, 300, 300, "fenster1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateGadgetList(WindowID(#fenster1))
  ButtonGadget(#oeffnefenster2, 5, 5, 100, 20, "fenster2 öffnen")       
EndProcedure

Procedure fenster2()
  OpenWindow(#fenster2, #PB_Ignore, #PB_Ignore, 100, 100, "fenster2", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateGadgetList(WindowID(#fenster2))
  ; [...]
EndProcedure

fenster1()
  
; ##### Hauptschleife #####
Repeat
  
  Event.l = WaitWindowEvent()
  
  Select Event     
    
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #oeffnefenster2
          fenster2()
      EndSelect     
      
    Case #PB_Event_CloseWindow
      Select EventWindow() ; von welchem Fenster kam das Event?
        Case #fenster1
          Quit=#True ; Eventschleife verlassen (=Programm beenden)
        Case #fenster2
          CloseWindow(#fenster2) ; fenster2 schliessen
      EndSelect
      
  EndSelect     
  
Until Quit=#True
Grüße ... Kiffi
a²+b²=mc²
dakotawolf
Beiträge: 7
Registriert: 13.05.2007 11:33
Wohnort: beim größten Kuppeldom in D

Beitrag von dakotawolf »

das Leben ist doch einfach schön! Danke!!!
Carpe Diem
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nochn beispiel das ich mal im englischen forum gepostet hatte...
vielleicht findest du ja noch die eine oder andere zusätzliche anregung darin...
http://www.purebasic.fr/english/viewtop ... 031#175031
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
dakotawolf
Beiträge: 7
Registriert: 13.05.2007 11:33
Wohnort: beim größten Kuppeldom in D

Beitrag von dakotawolf »

Ihr verwöhnt mich - auch gut, wenn auch ein bisschen mehr Code - aber super ordentlich!

Das mit den getrennten Enums wußte ich auch noch nicht...

Habt Ihr auch noch eine Idee für meinen älteren Post -wie ich ein Panel einfärben kann?

Merci!
Carpe Diem
Antworten