-> Hier kostenlos registrieren
Vorab: WinCC 7.3, Server/Client Projekt, Clients sind PCs
Hallo liebe Helfer,
ich schreibe gerade ein Faceplate, bei dem ich in einem VBScript durch alle Bild-Objekte des Faceplates iterieren muss.
Hintergrund ist, dass die normalen Windows-Radio-Boxen zu klein sind, und auch nicht mehrspaltig so darstellbar sind, dass nachher immer nur ein Item selektiert sein kann. Ich möchte das Verhalten daher mit Buttons nachbauen, die entweder keinen Text haben, oder ein "X". Jeder Button ist über seinen Namen eindeutig identifiziert: BLM001, BLM002, ... ...
Wird nun ein Button gedrückt, wird die Zahl im Namen (Right(Item.ObjectName, 3)) in eine Faceplate-Variable geschrieben (32 Bit Ganzzahl). Das klappt auch, ich lasse mir den Wert probehalbar in einem E/A-Feld anzeigen. Bei Änderung dieses Wertes möchte ich nun durch alle Objekte gehen, schauen ob der Name mit "BLM" anfängt, und wenn ja abhängig von dem Wert meiner Variablen ein "X" oder ein Leerzeichen als Text setzen.
Obwohl ich bei meiner bisherigen Recherche immer wieder was davon gelesen habe, dass man ScreenItems() in einem Faceplate gar nicht nutzen kann, und schon gar nicht Properties setzen, klappt folgendes jedoch wunderbar:
Der Code wird bei Änderung des Ausgabewertes in dem E/A-Feld ausgeführt, welches die Nummer meines zuletzt gedrücken Buttons beinhaltet. BLM001 hat tatsächlich zur Runtime dann den Text "H", während er im Editor noch den Text "X" hat. Also scheint man ScreenItems wohl DOCH in einem Faceplate nutzen zu können, und Properties schreiben geht dann scheinbar auch.
Die Siemens VBS Referenz suggeriert, dass man ScreenItems() nicht nur mit Namen, sondern auch mit einem numerischen Index nutzen können soll. Aber genau da hapert es jetzt:
Code, den ich vor die Schleife setze, wird noch ausgeführt. Danach leider nichts mehr, und ich bekomme auch keine Fehlermeldungen irgendwelcher Art. Es passiert einfach nix. (Es werden auch keine Leerzeichen gesetzt, die Buttons haben alle vorab ein "-" als Text um das zu prüfen.)
Wie muss ich das richtig machen?
Danke euch schon mal!
EDIT: ScreenItems.Count ist 0! Lustigerweise habe ich das so ermittelt:
"Testfeld" ist ein Statischer Text der auf dem Faceplate liegt. Wenn ich also per Name dran komme, scheint in der Liste "ScreenItems" ja durchaus etwas drin zu sein. Warum ist dann aber Count 0?? Da komme ich jetzt nicht mehr mit.
Hallo liebe Helfer,
ich schreibe gerade ein Faceplate, bei dem ich in einem VBScript durch alle Bild-Objekte des Faceplates iterieren muss.
Hintergrund ist, dass die normalen Windows-Radio-Boxen zu klein sind, und auch nicht mehrspaltig so darstellbar sind, dass nachher immer nur ein Item selektiert sein kann. Ich möchte das Verhalten daher mit Buttons nachbauen, die entweder keinen Text haben, oder ein "X". Jeder Button ist über seinen Namen eindeutig identifiziert: BLM001, BLM002, ... ...
Wird nun ein Button gedrückt, wird die Zahl im Namen (Right(Item.ObjectName, 3)) in eine Faceplate-Variable geschrieben (32 Bit Ganzzahl). Das klappt auch, ich lasse mir den Wert probehalbar in einem E/A-Feld anzeigen. Bei Änderung dieses Wertes möchte ich nun durch alle Objekte gehen, schauen ob der Name mit "BLM" anfängt, und wenn ja abhängig von dem Wert meiner Variablen ein "X" oder ein Leerzeichen als Text setzen.
Obwohl ich bei meiner bisherigen Recherche immer wieder was davon gelesen habe, dass man ScreenItems() in einem Faceplate gar nicht nutzen kann, und schon gar nicht Properties setzen, klappt folgendes jedoch wunderbar:
Code:
Sub OutputValue_OnPropertyChanged(Byval Item, Byval value)
ScreenItems("BLM001").Text = "H"
End Sub
Die Siemens VBS Referenz suggeriert, dass man ScreenItems() nicht nur mit Namen, sondern auch mit einem numerischen Index nutzen können soll. Aber genau da hapert es jetzt:
Code:
Sub OutputValue_OnPropertyChanged(Byval Item, Byval value)
Dim obj
Dim i
For i = 1 To ScreenItems.Count
obj = ScreenItems(i)
If Left(obj.ObjectName, 3) = "BLM" Then
If Right(obj.ObjectName, 3) = SmartTags("SelectedLM").Value Then
obj.Text = "X"
Else
obj.Text = " "
End If
End If
Next
End Sub
Wie muss ich das richtig machen?
Danke euch schon mal!
EDIT: ScreenItems.Count ist 0! Lustigerweise habe ich das so ermittelt:
Code:
ScreenItems("Testfeld").Text = ScreenItems.Count
Zuletzt bearbeitet: