Seite 1 von 2

Repeat : Until WaitWindowEvent()

Verfasst: 05.06.2012 21:58
von Pr0fessor
huhu... habe eine weitere frage :D

liege ich richtig dass der befehl:

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

nur innerhalb einer "if" anweisung funktioniert?
denn normalerweise (so steht jedenfalls in der hilfe) werden ja die befehle "repeat" und "until" vor bzw. nach der schleife gesetzt und nicht beides (Repeat : Until) nach der schleife.

hat das ganze irgendwelche vor bzw. nachteile?

danke euch :D

Re: Repeat : Until WaitWindowEvent()

Verfasst: 05.06.2012 22:15
von ts-soft
Pr0fessor hat geschrieben:huhu... habe eine weitere frage :D

liege ich richtig dass der befehl:

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

nur innerhalb einer "if" anweisung funktioniert?
Nein, wer sagt den solchen Blödsinn?
Pr0fessor hat geschrieben: denn normalerweise (so steht jedenfalls in der hilfe) werden ja die befehle "repeat" und "until" vor bzw. nach der schleife gesetzt und nicht beides (Repeat : Until) nach der schleife.
Verstehe ich nicht, die Befehle Repeat : Until sind die Schleife!

Gruß
Thomas

Re: Repeat : Until WaitWindowEvent()

Verfasst: 05.06.2012 22:21
von Pr0fessor
nee - ich meine das Beispiel aus der hilfe z.B.:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0, 10, 10, 200, 20, "Standard Button")
    ButtonGadget(1, 10, 40, 200, 20, "Left Button", #PB_Button_Left)
    ButtonGadget(2, 10, 70, 200, 20, "Right Button", #PB_Button_Right)
    ButtonGadget(3, 10,100, 200, 60, "Multiline Button  (längerer Text wird automatisch umgebrochen)", #PB_Button_MultiLine)
    ButtonGadget(4, 10,170, 200, 20, "Toggle Button", #PB_Button_Toggle)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
denn die beiden befehle repeat und until werden doch in unterschiedlichen zeilen geschrieben oder nicht?

bsp.:

repeat
...
...
until katze = "miau"

Re: Repeat : Until WaitWindowEvent()

Verfasst: 05.06.2012 22:27
von RSBasic
Du kannst auch so schreiben:

Code: Alles auswählen

OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0, 10, 10, 200, 20, "Standard Button")
    ButtonGadget(1, 10, 40, 200, 20, "Left Button", #PB_Button_Left)
    ButtonGadget(2, 10, 70, 200, 20, "Right Button", #PB_Button_Right)
    ButtonGadget(3, 10,100, 200, 60, "Multiline Button  (längerer Text wird automatisch umgebrochen)", #PB_Button_MultiLine)
    ButtonGadget(4, 10,170, 200, 20, "Toggle Button", #PB_Button_Toggle)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Nur dann wird aber nicht überprüft, ob die Fenstererstellung erfolgreich war oder nicht. Ist zwar unwahrscheinlich, aber mal angenommen, es gäbe einen Fehler beim Erstellen des Fensters. Da würden die nachfolgenden Gadgets ebenfalls fehlschlagen und das Programm selbst würde vielleicht sogar abstürzen.

Und wenn du dich fragst, warum "Repeat" und "Until" in einer Zeile vorhanden sind, ist ganz einfach: Dazwischen ist ein Doppelpunkt. Damit kannst du zwei Zeilen kombinieren.
Ausgeschrieben, also ohne Doppelpunkt würde es so aussehen:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0, 10, 10, 200, 20, "Standard Button")
    ButtonGadget(1, 10, 40, 200, 20, "Left Button", #PB_Button_Left)
    ButtonGadget(2, 10, 70, 200, 20, "Right Button", #PB_Button_Right)
    ButtonGadget(3, 10,100, 200, 60, "Multiline Button  (längerer Text wird automatisch umgebrochen)", #PB_Button_MultiLine)
    ButtonGadget(4, 10,170, 200, 20, "Toggle Button", #PB_Button_Toggle)
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

Re: Repeat : Until WaitWindowEvent()

Verfasst: 05.06.2012 22:38
von ts-soft
Das If bezieht sich nur auf die OpenWindow() Funktion. Nur wenn diese nicht fehlschlägt, soll der nachfolgende
Code ausgeführt werden!

Repeat : Until (bzw. ForEver) ist eine fussgesteuerte Schleife, das heißt die Abbruchbedingung befindet sich am Ende
der Schleife, im Gegensatz zur kopfgesteuerten Schleife (While : Wend), wo sich die Abbruchbedingung am Anfang der
Schleife befindet.

If : ElseIf : Else : EndIf ist keine Schleife, das sind lediglich Abfragebedingungen, siehe auch hier.

Gruß
Thomas

Re: Repeat : Until WaitWindowEvent()

Verfasst: 05.06.2012 22:54
von Pr0fessor
ah ok - und nur zum verständnis - muss nicht vor openwindow() das "repeat"?
also:

repeat
OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(0, 10, 10, 200, 20, "Standard Button")
ButtonGadget(1, 10, 40, 200, 20, "Left Button", #PB_Button_Left)
ButtonGadget(2, 10, 70, 200, 20, "Right Button", #PB_Button_Right)
ButtonGadget(3, 10,100, 200, 60, "Multiline Button (längerer Text wird automatisch umgebrochen)", #PB_Button_MultiLine)
ButtonGadget(4, 10,170, 200, 20, "Toggle Button", #PB_Button_Toggle)
Until WaitWindowEvent() = #PB_Event_CloseWindow

?

tut mir leid wegen den wirklich blutigen anfängerfragen aber fragen kostet ja nichts :D

Re: Repeat : Until WaitWindowEvent()

Verfasst: 05.06.2012 22:56
von RSBasic
Nein. So ist schon korrekt:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0, 10, 10, 200, 20, "Standard Button")
    ButtonGadget(1, 10, 40, 200, 20, "Left Button", #PB_Button_Left)
    ButtonGadget(2, 10, 70, 200, 20, "Right Button", #PB_Button_Right)
    ButtonGadget(3, 10,100, 200, 60, "Multiline Button  (längerer Text wird automatisch umgebrochen)", #PB_Button_MultiLine)
    ButtonGadget(4, 10,170, 200, 20, "Toggle Button", #PB_Button_Toggle)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
Oder am besten einfach diese Vorlage nutzen:

Code: Alles auswählen

EnableExplicit

Define EventID

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Menu
      Select EventMenu()
        Case 1
          
      EndSelect
    EndIf
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case 1
          
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf

Re: Repeat : Until WaitWindowEvent()

Verfasst: 05.06.2012 23:21
von ts-soft
Pr0fessor hat geschrieben:ah ok - und nur zum verständnis - muss nicht vor openwindow() das "repeat"?
Nein, das öffnen eines Fensters soll ja schließlich nur einmal ausgeführt werden!

Nur die Frage: WaitWindowEvent(), also die Frage nach Ereignissen, wird wiederholt ausgeführt.
Gibt es ein Ereignis, z.B. drücken eines Buttons, wird der Code ausgeführt und danach geht der
Kreislauf von vorne los, bis das Fenster geschlossen wurde, weil ohne Fenster gibt es auch keine
Ereignisse :wink:

Re: Repeat : Until WaitWindowEvent()

Verfasst: 05.06.2012 23:26
von Pr0fessor
ahh jetzt ja....
jetzt ist alles klar :D

vielen dank für die Antworten und die Geduld !!!

Re: Repeat : Until WaitWindowEvent()

Verfasst: 06.06.2012 11:40
von Pr0fessor
noch eine frage zum verständnis:

würde die zeile

Code: Alles auswählen

repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
folgendes bedeuten?

Code: Alles auswählen

      Repeat
        WaitWindowEvent()
      Until WaitWindowEvent() = #PB_Event_CloseWindow