Seite 1 von 1

Hilfe bei mehreren Fenstern benötigt ...

Verfasst: 11.10.2005 15:23
von hiltwin
Hallo,

ich habe mit dem Visual Designer zwei Fenster gestaltet, mit denen das Programm mit dem Benutzer kommunizieren soll.
Dabei soll sich Fenster 2 erst öffnen, wenn im Fenster 1 ein Button geklickt wird.

Das bekomme ich soweit auch noch hin. Allerdings weiss ich nicht, wie ich das zweite Fenster wieder ordnungsgemäß schliesse. Klicke ich nämlich auf den Systemschliessen-Button des zweiten Fensters, werden beide Fenster - sprich die gesamte Anwendung geschlossen.

Ich öffne das zweite Fenster über den Befehl:

und habe dann über einen Gosub folgenden Code:

Fensterzweioeffnen:

Code: Alles auswählen

Open_Window_1()

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_EventGadget
  ;Debug "WindowID: " + Str(EventWindowID())
  GadgetID = EventGadgetID()
  If GadgetID = #Radio_Window1_Button1
  Debug "GadgetID: #Radio_Window1_Button1"
  ElseIf GadgetID = #Radio_Window1_Button2
  Debug "GadgetID: #Radio_Window1_Button2"
  ElseIf GadgetID = #String_Window1
  Debug "GadgetID: #String_Window1"
  ElseIf GadgetID = #Button_Window1_Button1
  Debug "GadgetID: #Button_Window1_Button1"
  ElseIf GadgetID = #Button_Button_Window1_Exit
  Debug "GadgetID: #Button_Window1_Exit"
  EndIf
  EndIf
Until Event = #PB_EventCloseWindow
Return
Wie kann ich es einrichten, dass beim Klicken des Systemschliessen-Button nur das 2. Fenster schliesst und bei Klicken von Button1 erst eine Aktion (Schreiben von Werten in ein ListGadget) ausgeführt wird und dann das zweite Fenster geschlossen wird und bei Klicken von Button Exit das zweite Fenster ohne weitere Aktion geschlossen wird?

Danke schon im voraus ...
Hiltwin

Edit by Kiffi: Code-Tags gesetzt

Verfasst: 11.10.2005 15:45
von Kiffi
@hiltwin:

nicht, dass Du meinst, es würde mir unheimlich viel Spass machen, Deine
Postings immer wieder zu korrigieren.

Wenn Du Source-Code hier postest, dann verwende bitte den dafür
gedachten Code-Button im entsprechenden Editor-Fenster!

Grüße ... Kiffi

...

Verfasst: 11.10.2005 16:00
von hiltwin

Code: Alles auswählen

ahja - button code gefunden
mal sehen, ob smilies auch funktionieren ;o)
:freak:[/c]

Verfasst: 11.10.2005 16:12
von bobobo

Code: Alles auswählen

Enumeration
  #Window_0
  #Window_1
  #Button_0
  #Button_1
  #Button_2
  #Button_3
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_0, 120, 70, 85, 35, "pseudo")
      ButtonGadget(#Button_1, 260, 100, 95, 40, "2. Fenster auf")
      
    EndIf
  EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 371, 266, 600, 300,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "New window ( 1 )",WindowID(#Window_0))
    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_2, WindowWidth()-130, 0, 130, 130, "Fenster schliessen")
      ButtonGadget(#Button_3, 400, 110, 50, 45, "F2 B2")
    EndIf
  EndIf
EndProcedure

Open_Window_0()
Open_Window_1()

Repeat ; Start of the event loop
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures
  If WindowID=#Window_1 And event= #PB_Event_CloseWindow
    CloseWindow(#window_1)
  EndIf
  
  If WindowID=#Window_0 And event= #PB_Event_CloseWindow
    CloseWindow(#window_0)
    quit=1
  EndIf
  
  GadgetID = EventGadgetID() ; Is it a gadget event?
  EventType = EventType() ; The event type
  
  If Event = #PB_EventGadget
    If GadgetID = #Button_0
    ElseIf GadgetID = #Button_1
      Open_Window_1()
    ElseIf GadgetID = #Button_2
      CloseWindow(#window_1)
    ElseIf GadgetID = #Button_3
    EndIf
  EndIf
Until quit=1
End
;

Verfasst: 11.10.2005 16:55
von spacewalker
Also wenn du mehrere fenster separat behandeln willst, musst du unbedingt das fenster rausfinden, in dem das ereigniss ausgeloest wurde

Code: Alles auswählen

; 3 Fenster oeffnen:
For nummer = 0 To 2
  OpenWindow(nummer,nummer*10,nummer*10,100,100,#PB_Window_SystemMenu,"Fenster"+Str(nummer))
Next nummer


Repeat
  If WaitWindowEvent() = #PB_Event_CloseWindow ; wenn schliessereigniss ausgeloest wurde...
    CloseWindow(EventWindowID()) ; Nur das verantwortliche Fenster schliessen!
  EndIf
  exit = 0 
  For nummer = 0 To 2
    If IsWindow(nummer) = 0
      exit = exit + 1
    EndIf
  Next nummer 
Until exit = 3
Debug "Alle geschlossen, ende"
End 

vielen dank ...

Verfasst: 11.10.2005 19:07
von hiltwin
... für eure hilfe,

besonders, weil ich dazu die anregungen bekam, um mich weiter in die thematik einzuarbeiten.

man sollte dann bei window_0 auch mal die schliess-option so verändern, dass dort

Code: Alles auswählen

WindowID=#Window_0 And event= #PB_Event_CloseWindow
steht - dann bleibt das erste fenster auch so lange offen. weiterhin hab ich dann da selber noch nen requester hintergesetzt, ob das programm wirklich beendet werden soll ;o)

also, wärs hier wer-weiss-was, gäbs zwei bewertungspunkte
:allright:

ciao - bis zur nächsten frage
8)

Verfasst: 12.10.2005 08:08
von PAMKKKKK
Vielleicht hilft dir mein Beispiel:
http://forums.purebasic.com/german/view ... 4898#54898

Verfasst: 16.10.2005 21:17
von hiltwin
nettes, kurzes und knackiges beispiel - so in der art hab ich es jetzt umgesetzt ...

frdl. gruss
hiltwin