Seite 1 von 1

mehrere Fensterinstanzen

Verfasst: 06.09.2005 14:32
von Rico
Hallo,

ich will durch Klick auf einen Button ein neues Fenster anzeigen. Nur soll jedesmal wenn ich auf den Button klicke, das gleiche Fenster neu erzeugt und angezeigt werden (neue Instanz).

Wie müsste ich folgenden Code anpassen, damit das funktioniert?

Rico


Code: Alles auswählen

Enumeration
  #Window_Hauptfenster
  #Window_Folgefenster
EndEnumeration

Enumeration
  #Button_Fenster_Open
EndEnumeration

Procedure Open_Window_Hauptfenster()
  If OpenWindow(#Window_Hauptfenster, 405, 324, 150, 61,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Hauptfenster")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_Fenster_Open, 20, 10, 110, 40, "neues Fenster")
      
    EndIf
  EndIf
EndProcedure

Procedure Open_Window_Folgefenster()
  If OpenWindow(#Window_Folgefenster, 572, 324, 197, 77,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Folgefenster")
    If CreateGadgetList(WindowID())
      
    EndIf
  EndIf
EndProcedure

Open_Window_Hauptfenster()

Repeat
  
  Event = WaitWindowEvent()
  
  WindowID = EventWindowID()
  
  GadgetID = EventGadgetID()
  
  EventType = EventType()
  
  If Event = #PB_EventGadget
    
    If GadgetID = #Button_Fenster_Open
      Open_Window_Folgefenster()
    EndIf
    
  EndIf
  
  If Event = #PB_Event_CloseWindow And WindowID = #Window_Folgefenster
    CloseWindow(WindowID)
  EndIf
  
Until Event = #PB_Event_CloseWindow And WindowID = #Window_Hauptfenster

End
Edit by Kiffi: Code-Tags hinzugefügt

Verfasst: 06.09.2005 14:38
von AndyX
Sieh mal in der Hilfe zu #PB_Any :allright: Damit wird deinem Fenster automatisch eine ID zugewiesen. Sollte in der Hilfe bei OpenWindow oder so sein.

Verfasst: 06.09.2005 14:53
von Rico
Hab ich schon versucht. Das klappt auch. Es wird jedesmal ein neues Fenster geöffnet.
Nun habe ich aber das Problem, dass ich auf dem Folgefenster mehrere Gadgets plazieren möchte. Erzeuge ich das Gadget mit Enum-Konstanten ist es immer nur auf dem zuletzt geöffneten Fenster sichbar.
Auch hier habe ich es mit #PB_Any versucht und es klappt. Dann sind die Gadgets in jedem offenen Fenster sichtbar.

ABER

Wie kann ich nun auf diese Gadgets zugreifen, da ich ja keine Konstanten mehr habe?

Verfasst: 06.09.2005 15:37
von ts-soft

Code: Alles auswählen

; Statt so
ButtonGadget(#Button_Fenster_Open, 20, 10, 110, 40, "neues Fenster") 


; so
Global Button_Fenster_Open.l
Button_Fenster_Open = ButtonGadget(#PB_Any, 20, 10, 110, 40, "neues Fenster")
Verwendest jetzt die Variable anstatt der Konstanten

Verfasst: 06.09.2005 16:22
von Rico
Thomas,

habe das Beispiel mal entspr. angepasst.
Nun haut aber die Ereignisschleife nicht mehr hin. Ich kann nur auf die Textfelder im jeweils zuletzt erzeugten Fenster zugreifen?

Code: Alles auswählen

Enumeration
  #Window_Hauptfenster
  #Window_Folgefenster
EndEnumeration

Enumeration
  #Button_Fenster_Open
EndEnumeration

Global String_1.l, String_2.l, button_1.l, button_2.l


Procedure Open_Window_Hauptfenster()
  If OpenWindow(#Window_Hauptfenster, 405, 324, 150, 61,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Hauptfenster")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_Fenster_Open, 20, 10, 110, 40, "neues Fenster")
      
    EndIf
  EndIf
EndProcedure

Procedure Open_Window_Folgefenster()
  If OpenWindow(#PB_Any, 572, 324, 300, 100,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Folgefenster")
    If CreateGadgetList(WindowID())
      String_1 = StringGadget(#PB_Any, 35, 20, 110, 30, "")
      String_2 = StringGadget(#PB_Any, 35, 55, 110, 30, "") 
      button_1 = ButtonGadget(#PB_Any, 155, 20, 100, 30, "zeige String 1")
      button_2 = ButtonGadget(#PB_Any, 155, 55, 100, 30, "zeige String 2")
      
      SetGadgetText(String_1,Str(String_1))
      SetGadgetText(String_2,Str(String_2))
      
    EndIf
  EndIf
EndProcedure

Open_Window_Hauptfenster()

Repeat
  
  Event = WaitWindowEvent()
  
  WindowID = EventWindowID()
  
  GadgetID = EventGadgetID()
  
  EventType = EventType()
  
  If Event = #PB_EventGadget
    
    If GadgetID = #Button_Fenster_Open
      Open_Window_Folgefenster()
    ElseIf GadgetID = button_1
      MessageRequester("Button 1 zeigt String 1", GetGadgetText(String_1))
    ElseIf GadgetID = button_2
      MessageRequester("Button 2 zeigt String 2", GetGadgetText(String_2))  
    EndIf
    
  EndIf
  
  If Event = #PB_Event_CloseWindow And WindowID <> #Window_Hauptfenster
    CloseWindow(WindowID)
  EndIf
  
Until Event = #PB_Event_CloseWindow And WindowID = #Window_Hauptfenster

End
Edit by Kiffi: Code-Tags gesetzt

Verfasst: 06.09.2005 19:08
von AndyX
UseWindow() musst du auch noch einbauen, das aktiviert das angegebene Fenster für Eventupdating usw...