Seite 1 von 1

Schleife - Ereigniss erst wenn Änderung?

Verfasst: 01.10.2016 19:40
von Zerosurf

Code: Alles auswählen

Nb_Monitors = ExamineDesktops()
Repeat  
  If Nb_Monitors > 1
    Debug "You have "+ExamineDesktops()+" monitors connected!"
  Else
    Debug "You have "+ExamineDesktops()+" monitor connected!"
  EndIf
  Delay(1000)
ForEver
Wie schaffe ich es hier, daß die Debug Meldung nur bei Änderung des Ereignisses erscheint und dann auch nur einmal?
Steh grad voll daneben?

__________________________________________________
Quote>Code
01.10.2016
RSBasic

Re: Schleife - Ereigniss erst wenn Änderung?

Verfasst: 01.10.2016 21:47
von Rudi
Diesen:

Code: Alles auswählen

Nb_Monitors = ExamineDesktops()

Repeat 
  
  If Nb_Monitors <> ExamineDesktops()
  	Nb_Monitors = ExamineDesktops()
    Debug "You have "+Nb_Monitors+" monitors connected!"
  EndIf
  
  Delay(1000)

ForEver

Re: Schleife - Ereigniss erst wenn Änderung?

Verfasst: 01.10.2016 22:13
von Zerosurf
Genau das wars!
Ich hab den Code nochmal angepasst:

Code: Alles auswählen

Nb_Monitors = ExamineDesktops()

Select Nb_Monitors
  Case 1
    Debug "You have "+ExamineDesktops()+" monitor connected!"
  Case 2
    Debug "You have "+ExamineDesktops()+" monitors connected!"
EndSelect

Repeat
  If Nb_Monitors <> ExamineDesktops()
    Nb_Monitors = ExamineDesktops()
    Select Nb_Monitors
      Case 1
        Debug "You have "+ExamineDesktops()+" monitor connected!"
      Case 2
        Debug "You have "+ExamineDesktops()+" monitors connected!"
    EndSelect
  EndIf
  Delay(1000)
ForEver
...damit er von Anfang an den Status anzeigt!
Könnte ich den Code noch vereinfachen, oder passt der so?

Re: Schleife - Ereigniss erst wenn Änderung?

Verfasst: 01.10.2016 22:22
von RSBasic
Zerosurf hat geschrieben:Könnte ich den Code noch vereinfachen
Ja, der Abfrage-Code hast du einfach dupliziert. Das ist eine schlechte Vorgehensweise. Wenn du diese Abfrage anpassen möchtest, dann musst du stets daran denken, beide Codes anzupassen. Wenn du einmal vergisst, dann entstehen ganz schnell nicht nachvollziehbare Bugs.
Wenn du einen Code mehrmals verwenden möchtest, dann füg diesen in eine Prozedur ein, die du wiederverwenden kannst:

Code: Alles auswählen

EnableExplicit

Define Nb_Monitors

Procedure NennEsWieDuWillst()
  Protected Nb_Monitors
  
  Nb_Monitors = ExamineDesktops()
  Select Nb_Monitors
    Case 1
      Debug "You have "+ExamineDesktops()+" monitor connected!"
    Case 2
      Debug "You have "+ExamineDesktops()+" monitors connected!"
  EndSelect
  
  ProcedureReturn Nb_Monitors
EndProcedure

Nb_Monitors = NennEsWieDuWillst()

Repeat
  If Nb_Monitors <> ExamineDesktops()
    Nb_Monitors = NennEsWieDuWillst()
  EndIf
  Delay(1000)
ForEver

Re: Schleife - Ereigniss erst wenn Änderung?

Verfasst: 01.10.2016 22:28
von Zerosurf
Das hab ich versucht, nur ich Depp hab den "EndProcedure" Befehl vergessen und deshalb hats dann auch nicht funktioniert! Vielen Dank für die Hilfe! Und ich wollte schon Python versuchen zu lernen, aber irgendwie gefällt mir PB einfach besser! ;)

Re: Schleife - Ereigniss erst wenn Änderung?

Verfasst: 01.10.2016 22:31
von RSBasic
Zerosurf hat geschrieben:aber irgendwie gefällt mir PB einfach besser! ;)
Mir auch. :)

Re: Schleife - Ereigniss erst wenn Änderung?

Verfasst: 01.10.2016 22:42
von Rudi
Oder so:

Code: Alles auswählen

Repeat
	Nb_Monitors1 = ExamineDesktops()
	
	If Nb_Monitors1 <> Nb_Monitors2
		Nb_Monitors2 = Nb_Monitors1
		Debug "You have "+Nb_Monitors2+" monitor(s) connected!"
	EndIf
	
	Delay(1000)
ForEver

Re: Schleife - Ereigniss erst wenn Änderung?

Verfasst: 01.10.2016 23:54
von Zerosurf
das wäre natürlich die einfachste variante, aber ich wollte a bissl was draus lernen! ;)