Handhabung von Grafik-Eigenschaften

Grafikelemente bieten üblicherweise drei Schnittstellen zur Interaktion aus Sicht der Control-Sprache. Diese definieren das Aussehen, die Funktionalität sowie die Bedienbarkeit und liefern Benutzereingriffe in Form von Ereignissen. Auf diese kann mit der Control-Sprache reagiert werden.

  • Eigenschaften (Properties): Definieren das Aussehen/Funktionen, z.B. Farbe, Sichtbarkeit,...

  • Methoden(Methods): Definieren Aktionen des Grafikobjekts, z.B. Sortierung einer Tabelle

  • Ereignisse(Events): Definieren äußere Einwirkungen wie z.B. Mausklicks, Fokuserhalt,...

Die meisten Eigenschaften (Properties) können sowohl per Control gelesen wie auch geschrieben werden. Das Prinzip ist ähnlich wie bei Datenpunktzugriffen - die Werte der Eigenschaften werden auf Variablen abgebildet, diese können im Script verarbeitet werden und anschließend wiederum auf Grafik-Eigenschaften übertragen werden.

Die Funktion zum Lesen der Grafikeigenschaften lautet:

getValue(string shape, string prop, anytype value [,anytype val2..]);

Es wird hiermit der Wert der Grafikeigenschaft 'prop' des Grafikobjekts 'shape' ausgelesen und auf die Variable 'value' übertragen. Besitzt eine Grafikeigenschaft zwei Werte, so wird einfach ein weiterer Parameter angefügt (z.B. Eigenschaften "scale" oder "size").

main()
{
  string col;
  getValue("Border1","backCol", col); // Rechteck mit dem Namen
  // 'Border1': Auslesen der 
  // Eigenschaft 'Hintergrundfarbe'
  DebugN(col); // Ausgabe im Log Viewer (string)
}

Als Alternative kann auch einfach die Kurzform in Anlehnung an C++ verwendet werden. Für eine einzelne Eigenschaft ist die Syntax mit der Punktschreibweise der obigengetValue()Funktion gleichwertig.

col = Border1.backCol;

Um eine Grafikeigenschaft von Control aus zu setzen wird der inverse BefehlsetValue()verwendet:

setValue(string shape, string prop, anytype value [,anytype val2..]);

bzw.

shape.prop = value;

Dabei wird der Inhalt der Variablen 'value' auf die Eigenschaft 'prop' des Grafikobjekts 'shape' übertragen. Wird von einem EventScript aus das eigene Grafikobjekt angesprochen, so kann auch hier eine Kurzform verwendet werden:

setValue("","prop",val);

getValue("","prop",val);

this.prop = val;

val = this.prop;

Die beiden Möglichkeiten sind jeweils zueinander gleichwertig. Wie vorhin bei den Datenpunkt-Zugriffen ist auch bei den Grafik-Zugriffen das gemeinsame Lesen/Setzen mehrere Eigenschaften in einem Befehl möglich - die bleibt allerdings hier der Langform mitgetValue()bzw.setValue()vorbehalten.

setValue("", "backCol", stringVar1, "text", textVar1);

Auch der gleichzeitige Zugriff auf mehrere Eigenschaften von mehreren Grafikobjekten ist über die Funktionen getMultiValue() und setMultiValue() möglich.

Anmerkung:

Es ist allerdings nicht möglich mehrere Eigenschaften mit der Punktschreibweise zu verknüpfen. Z.B.:

this.text("123").color("green")

Die Audrücke werden nicht ausgeführt und es wird eine Exception geworfen.

Welche Grafikeigenschaften und Methoden eines Grafikobjekts von Control aus ansprechbar sind, wird in der Online-Hilfe unter Grafikobjekte erläutert. Dabei gibt es eine Reihe von Eigenschaften, die auf allen Objekten existieren, andere können nur spezifisch auf einem bestimmten Grafikobjekt verwendet werden.

Besteht ein Gerätesymbol aus zahlreichen einzelnen Grafikobjekten, so empfiehlt es sich, die ganze Dynamisierung in ein einziges Script zusammen zu ziehen. Soll der gesamte Bereich des Symbols auch entsprechend auf Mausklicks reagieren, so würde man annehmen, einfach in jedem Objekt das entsprechende Script vorsehen zu müssen. Statt dessen kann man in WinCC OA mit unsichtbaren Click-Shapes arbeiten: Zeichnen Sie einfach ein Rechteck über den gewünschten Bereich und setzen Sie sowohl die Vordergrund- wie auch die Hintergrundfarbe unsichtbar ("_Transparent") - Durch einfügen der folgenden Zeile im Initialize-Script dieses Objekts, wird es klick-sensitiv und kann die Benutzereingaben auswerten:

this.fill = "[solid]";