WinCC VBS: Sichtbarkeit eines Bildfensters abfragen

MSP

Level-2
Beiträge
210
Reaktionspunkte
21
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen Zusammen,

ich versuche mich gerade am dynamischen Öffnen von Bildfenstern in einer Runtime Profession v16

Ich habe in einem Grundbild 5 Bildfenster erstellt (Popup1 bis Popup5)
An einem Taster habe ich folgendes Script (VBS) beim Klicken angebunden:

Code:
Sub VB_OpenNextPopup(ByRef Bildname, ByRef Bildfenster)
Dim oPicWin1, oPicWin2, oPicWin3, oPicWin4, oPicWin5
    
Set oPicWin1 = HMIRuntime.ActiveScreen.Parent.Parent.ScreenItems("Popup1")
Set oPicWin2 = HMIRuntime.ActiveScreen.Parent.Parent.ScreenItems("Popup2")
Set oPicWin3 = HMIRuntime.ActiveScreen.Parent.Parent.ScreenItems("Popup3")
Set oPicWin4 = HMIRuntime.ActiveScreen.Parent.Parent.ScreenItems("Popup4")
Set oPicWin5 = HMIRuntime.ActiveScreen.Parent.Parent.ScreenItems("Popup5")

If oPicWin1.Visible = True Then
  MsgBox "Sichtbar", vbOKOnly
Else
  MsgBox "Unsichtbar", vbOKOnly
End If
End Sub

Was mich ziemlich verwirrt, um ehrlich zu sein, ist der Test auf die Abfrage ob das Bildfenster Visible = True hat.

Wenn ich das Bild, auf welchem der Taster projektiert ist, aufrufe, sind keine Bildfenster sichtbar.
Betätige ich nun den Taster, dann erhalte ich die MSGBOX mit dem Inhalt "Sichtbar". Eigentlich erwarte ich hier doch die MSGBOX "Unsichtbar"

Wenn ich die Abfrage im Script drehe, also aus True False mache, dann dreht sich auch das Ergebnis.
Ist das ein Fehler vom TIA, habe ich eventuell die Falsche vorgehensweise?
Ich möchte im Endeffekt ermitteln, welches der 5 Popups bereits geöffnet ist und dann das folgende Öffnen. Die Reihenfolge ist stur von 1 bis 5...

Gruss,
Michael

Nachtrag: Wenn ich das Script Abfrage mit TRUE wie oben beschrieben, und hierbei dann das Bildfenster erneut auf VISIBLE = TRUE setze, wird das Bildfenster angezeigt. Wenn ich nun das Bildfenster schließe, dann wird die Abfrage durch das Script beim erneuten Betätigen des Tasters korrekt mit der MSGBOX "Unsichtbar" quittiert.
Kann es sein / ist es eventuell so, dass beim Starten der Runtime der Zustand undefiniert ist und ich somit garnicht erst abfragen kann ob das Bildfenster beim ersten Aufruf des Scriptes schon angezeigt wird?
 
Zuletzt bearbeitet:
Hallo Zusammen,

manchmal sieht man den Wald vor lauter Bäumen nicht....
Die Bildfenster hatten zu Recht die Eigenschaft Visible = TRUE, weil in den Eigenschaften der Bildfenster der Haken für die Sichtbarkeit auch gesetzt war.
Scheinbar waren die Bildfenster die ganze Zeit Sichtbar, lagen nur hinter anderen Bildfenstern bedeckt.
Nachdem ich in den Eigenschaften die Sichtbarkeit deaktiviert habe, funktioniert mein Script nun auch wie gewünscht.

Hier der Code falls es auch einmal benötigt wird:

Code:
Sub VB_OpenNextPopup(ByRef Bildname)
' Ermittelt das nächste nicht geöffnete Bildfenster und benutzt dieses für den Aufruf. Sind alle Popups bereits geöffnet, wird eine Warnung ausgegeben.
' ACHTUNG: Die Bildfenster zum Aufruf der Popups müssen den Namen 'Popup1' bis 'Popup5' haben und den den Vorlagebildern vorhanden sein!
' ACHTUNG: Die Eigenschaft "Sichtbarkeit" der Bildfenster in den Vorlagen muss zwingend deaktiviert sein!
' 31.07.2020, Michael Sporken

Dim oPicWin1, oPicWin2, oPicWin3, oPicWin4, oPicWin5
    
Set oPicWin1 = HMIRuntime.ActiveScreen.Parent.Parent.ScreenItems("Popup1")
Set oPicWin2 = HMIRuntime.ActiveScreen.Parent.Parent.ScreenItems("Popup2")
Set oPicWin3 = HMIRuntime.ActiveScreen.Parent.Parent.ScreenItems("Popup3")
Set oPicWin4 = HMIRuntime.ActiveScreen.Parent.Parent.ScreenItems("Popup4")
Set oPicWin5 = HMIRuntime.ActiveScreen.Parent.Parent.ScreenItems("Popup5")

If oPicWin1.Visible = False Then
  oPicWin1.Visible = True                ' Schaltet das Bildfenster sichtbar
  oPicWin1.PictureName = Bildname        ' Name des Bildes im Bildfenster
  oPicWin1.CaptionText = Bildname        ' Name des Bildes als Überschrift setzen
ElseIf oPicWin2.Visible = False Then
  oPicWin2.Visible = True                ' Schaltet das Bildfenster sichtbar
  oPicWin2.PictureName = Bildname        ' Name des Bildes im Bildfenster
  oPicWin2.CaptionText = Bildname        ' Name des Bildes als Überschrift setzen
ElseIf oPicWin3.Visible = False Then
  oPicWin3.Visible = True                ' Schaltet das Bildfenster sichtbar
  oPicWin3.PictureName = Bildname        ' Name des Bildes im Bildfenster
  oPicWin3.CaptionText = Bildname        ' Name des Bildes als Überschrift setzen
ElseIf oPicWin4.Visible = False Then
  oPicWin4.Visible = True                ' Schaltet das Bildfenster sichtbar
  oPicWin4.PictureName = Bildname        ' Name des Bildes im Bildfenster
  oPicWin4.CaptionText = Bildname        ' Name des Bildes als Überschrift setzen
ElseIf oPicWin5.Visible = False Then
  oPicWin5.Visible = True                ' Schaltet das Bildfenster sichtbar
  oPicWin5.PictureName = Bildname        ' Name des Bildes im Bildfenster
  oPicWin5.CaptionText = Bildname        ' Name des Bildes als Überschrift setzen
Else
  MsgBox "Please close one or more popups!", vbCritical, "Too many popups opened"
End If
End Sub

Gruss,
Michael
 
Zurück
Oben