Produkt: | Elvis |
Version: | ab 2.0 (Beispielprojekt erstellt mit 2.3) |
Stand: | 2005-01-18 |
Zusammenfassung
Hier finden Sie Informationen und Downloads für grafische Elemente, die durch die Ereignisverarbeitung der Bedienstation bewegt oder verändert werden.
Achtung: Hier werden keine Kontrollelemente verändert, sondern „ganz normale“ grafische Elemente wie Linien oder Polygone. Dieser Bereich ist also nicht für die Lösung von Standardaufgaben oder gar für einen Einsteiger in Elvis gedacht, sondern für die Elvis-Profis oder für Programmierer, die noch mehr Dynamik auf die Seiten bringen wollen.
Einzelheiten
Allgemeines
Einstimmung
Laden Sie das kleine Dynamik-Projekt (dynamic.zip) herunter, öffnen Sie die Seite „blind“ in der Projektierung und spielen Sie etwas mit dem Schieberegler (Benutzermodus!). Die Seite „polygon“ enthält auch einen interessanten Effekt.
Eine nette Sache? Sie wollen wissen, wie das geht? Lesen Sie weiter!
Zugriff auf grafische Elemente
Alle Eigenschaften von grafischen Elementen können über die Ereignisverarbeitung der Bedienstation verändert werden – ja wirklich!
Die Schwierigkeit liegt zunächst nur im Zugriff auf das Element. Leider haben die Elemente keinen Namen (wie z.B. die Kontrollelemente). Alle Elemente haben aber einen Datenpunktnamen (DatapointName). [Bitte keine Kommentare dazu – ich kann das auch nicht nachvollziehen.]
Mit dem Datenpunktnamen können wir uns gut behelfen.
Leider gibt es für die grafischen Elemente kein User-Interface für das Setzen oder Verändern dieses Datenpunktnamens (ist im Eigenschaftsdialog nicht enthalten). Abhilfe: wir benutzen ein kleines Makro, mit dem wir dem Element einen Datenpunktnamen geben. Damit haben wir schon alle Hürden für den Zugriff genommen!
Füllart eines Polygons dynamisch verändern
set_dpname
Das Makro setzt den Datenpunktnamen für ein selektiertes grafisches Element (z.B. ein Polygon). Es ist recht einfach aufgebaut. Das Programm enthält eigentlich nur zwei interessante Zeilen:
Hier wird das Objekt „Element“ auf das selektierte Element der Zeichnung gesetzt:
Set Element = Drawing.ActiveElement
und hier wird der Datenpunktname aus dem Dialog in der Eigenschaft „DatapointName“ des Elements gespeichert:
Element.DatapointName = dlg.ctlDatapointName
Download set_dpname.idm
Füllart eines Polygons über Datenpunktwerte verändern
Wenn sie den Fülleffekt von Polygonen über Datenpunktwerte setzen möchten, sind einige Ereignisse zu verarbeiten. Hier finden Sie ein kleines Beispiel das den Fülleffekt über Datenpunktwerte setzt und damit besser auf die Verwendung in einem Projekt abgestimmt ist.
Download dynamic_dp.zip
Ereignisverarbeitung
Jetzt wollen wir das grafische Element verändern. Dazu müssen wir es zuerst auf einer Seite finden und dann eine oder mehrere seiner Eigenschaften verändern. Damit wir ein Element finden können, hat es ja einen Datenpunktnamen erhalten (siehe oben).
Das Finden soll möglichst schnell gehen. Deshalb ist es gut, wenn wir die Suche nicht im ganzen Dokument (also in allen Schichten) durchführen müssen, sondern uns auf eine Schicht beschränken können. Wenn diese Schicht nur wenige Elemente enthält, geht die Suche natürlich noch schneller.
Fazit: Wir benutzen für unsere dynamischen Elemente eine eigene Schicht. Diese Schicht nennen wir „Dynamik“ (es kann natürlich auch jeder andere Name verwendet werden – das ist dann natürlich in der Ereignisverarbeitung zu berücksichtigen).
Damit die Ereignisverarbeitung übersichtlich bleibt, verwenden wir ein Unterprogramm, das wir im globalen Bereich der Form ablegen. Das Unterprogramm soll „SetFillStyle“ heißen, weil wir damit die Füllung des Elements zwischen gefüllt und ungefüllten umschalten. Es hat zwei Parameter: den Datenpunktnamen und den Wert. Das Unterprogramm sucht alle Elemente der Schicht „Dynamik“, deren Datenpunktname dem übergebenen Namen entspricht und setzt deren FillStyle auf 1, wenn der Wert nicht Null ist, andernfalls wird der FillStyle auf 0 gesetzt.
Das Programm ist im Beispielprojekt (Seite „polygon“) enthalten.
Steigerung: Linie drehen
Wenn wir das Verändern von Eigenschaften grafischer Elemente (Polygon) grundsätzlich verstanden haben, können wir uns an eine etwas größere Aufgabe wagen.
Die Lamellenstellung von Jalousien kann durch Linien grafisch dargestellt werden. Die Koordinaten der Linien müssen für den jeweiligen Stellwert berechnet werden. Die mathematischen Grundlagen sind auf der Seite „blind“ enthalten.
Die Besonderheit der Lösung ist die Speicherung der Koordinaten des Mittelpunkts. Das ist notwendig, damit die Linie immer an ein und der selben Stelle gezeichnet wird und auch nach sehr vielen Berechnungen ihre Position beibehält. Außerdem wird auch die Länge der Linie gespeichert. Da für diese Daten keine Eigenschaften vorgesehen sind, werden die Koordinaten des Mittelpunkts und die Länge zusammen in der Eigenschaft HistoryName abgelegt. Das ist eine etwas unsaubere Verwendung dieser Eigenschaft. Da die Eigenschaft für grafische Elemente aber bedeutungslos ist, sollten wir damit keine Probleme bekommen.
set_blind
Damit das Setzen des Datenpunktnamens, des Mittelpunkts und der Länge einfach ist, habe ich auch hier ein kleines Makro bereitgestellt:
Download set_blind.idm
Ereignisverarbeitung
Für die Ereignisverarbeitung verwenden wir wieder ein Unterprogramm („Blind“). Prinzipiell ist das Programm aufgebaut wie oben (SetFillStyle), jetzt werden aber auch noch die Daten aus dem HistoryName verwendet, um die Koordinaten der Linie zu berechnen und neu zu setzen.
Es sollte Ihnen keine Probleme bereiten, die Beispiele auf die Verwendung von Datenpunktwerten zu übertragen. Wenn es hier doch Fragen gibt, wenden Sie sich an den Webmaster.
set_blinds
Hier noch eine Steigerung des Ganzen! Mit dem Makro set_blinds werden automatisch die Lamellen (Linien) erzeugt und mit dem Datenpunkt verbunden.
Das Ergebnis sieht dann z.B. so aus:
Download dyn.zip