Repeat : Until WaitWindowEvent()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Pr0fessor
Beiträge: 40
Registriert: 21.07.2011 16:13
Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
Wohnort: Hagenow
Kontaktdaten:

Repeat : Until WaitWindowEvent()

Beitrag 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
~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Repeat : Until WaitWindowEvent()

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Pr0fessor
Beiträge: 40
Registriert: 21.07.2011 16:13
Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
Wohnort: Hagenow
Kontaktdaten:

Re: Repeat : Until WaitWindowEvent()

Beitrag 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"
~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Repeat : Until WaitWindowEvent()

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Repeat : Until WaitWindowEvent()

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Pr0fessor
Beiträge: 40
Registriert: 21.07.2011 16:13
Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
Wohnort: Hagenow
Kontaktdaten:

Re: Repeat : Until WaitWindowEvent()

Beitrag 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
~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Repeat : Until WaitWindowEvent()

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Repeat : Until WaitWindowEvent()

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Pr0fessor
Beiträge: 40
Registriert: 21.07.2011 16:13
Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
Wohnort: Hagenow
Kontaktdaten:

Re: Repeat : Until WaitWindowEvent()

Beitrag von Pr0fessor »

ahh jetzt ja....
jetzt ist alles klar :D

vielen dank für die Antworten und die Geduld !!!
~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
Benutzeravatar
Pr0fessor
Beiträge: 40
Registriert: 21.07.2011 16:13
Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
Wohnort: Hagenow
Kontaktdaten:

Re: Repeat : Until WaitWindowEvent()

Beitrag 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
~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
Antworten