FG Eigene und mächtige Variablenverwaltung mit [cX.Var(ID).X]:
Mit diesen Platzhaltern können eigene Variablenbereiche definiert, flexibel verwendet, gespeichert und geladen, serialisiert sowie gemeinsam gelöscht werden.
Ein solcher Bereich kann auch sehr gut zum Ablegen von Programmeinstellungen verwendet werden, da die Einstellungen beliebig sein können und das Sichern/Wiederherstellen dieser Einstellungen direkt unterstützt wird.
Für die Einträge können auch Datentypen definiert werden. Neben den typisierten Exportmöglichkeiten (z.B. für den Datenaustausch mit Webdiensten per JSON) ist dadurch auch eine echte binäre Ausgabe möglich, was etwa manchmal für die Übergabe von binären Strukturen an DLL-Aufrufe benötigt wird.
Der Datentyp des Eintrags kann durch das Anhängen eines speziellen Zeichens an den Wertenamen (Postfix) bestimmt werden. Dieser wird beim Schreiben überprüft. Bei einem ungültige Wert wie z.B. "AB" für ein Zahlenfeld wird das Fehlerereignis ::Var_Formatfehler bzw. ::Var(ID)_Formatfehler aufgerufen, welches einen neuen Wert für den Eintrag zurückliefern kann. Andernfalls bleibt der Eintrag unverändert.
Mögliche Typen-Postfixe sind:
• | % = ganzzahliger Wert (32bit Integer) |
• | > = ganzzahlige 16bit-Werte |
• | < = ganzzahlige 8bit-Werte (Bytes) |
• | ! = Fließkommazahl |
• | # = Datum/Uhrzeit |
• | ? = Ja/Nein-Eintrag (Boolean) |
Sondertypen für _Editieren:
• | - = interner, anonymer Eintrag, welcher nicht im Editor von [cX.Var()._Editieren()] aufgeführt ist |
• | : = mehrzeiliger Text |
• | | = Liste mit Texten für eine Dropdown-Liste bei "_Editieren" (kein "echter" Datentyp) mit einem Wert als Liste mit Einträgen, wobei ein mit "!" beginnender Eintrag vorausgewählt wird oder ein mit ":" beginnender Eintrag der (editierbare) Vorgabe-Text bei einer Kombinationsliste ist. |
Datentypen spielen neben der Werteprüfung auch eine Rolle bei der typisierten Serialisierung (siehe ._JSON) oder dem Editieren der Inhalte (siehe ._Editieren()).
Einzelne Einträge können auch ihrerseits Listen sein, auf deren Eintrag Nummer X dann direkt per [cX.Var().Eintrag(X)] zugegriffen werden kann. Die Anzahl der Elemente in einem Listeneintrag kann per .[cX.Var()._Max(Eintrag)] ermittelt werden.
Folgende Platzhalter stehen als [cX.Var(ID).X] zur Verfügung:
.X | Zugriff auf den Wert X (Name oder Index 1..._Anzahl) |
._Anzahl | Anzahl der Werte im Variablenbereich ID |
._Eintrag(Index) | Zugriff auf den per Index (Name oder numerischer Index 0..n) angegebenen Eintrag (alternative Schreibweise). Wird ein ungültiger Wert in einen mit Datentyp versehenen Eintrag geschrieben, wird das Fehlerereignis ::Var_Formatfehler aufgerufen. |
._Name(Index) | Ermitteln des Eintragsnamens an der per Index angegebenen Position |
._FehlerFeld | Name des Feldes, in das zuletzt ein ungültiger Wert eingetragen werden sollte |
._Editieren(X) | das Lesen dieses Platzhalters erstellt ein Eingabeformular für die Bearbeitung der enthaltenen Felder. Als Ergebnis wird 0 bei Abbruch und 1 bei der Bestätigung des Formulars durch den Anwender geliefert. Definierte Datentypen werden geprüft und berücksichtigt, anonyme Einträge (mit - am Ende) werden nicht aufgeführt. Als Index X kann hier der Dialogtitel angegeben werden, optional gefolgt von Breite;X;Y. Zusätzlich können ein oder zwei Buttontexte angegeben werden, wodurch weitere Buttons in dem Dialog erscheinen, deren Klick dann in den Ereignissen ::Var()_ExtraButton bzw. _ExtraButton2 gemeldet wird. |
._Histogramm(Modus;Text) | Liefert eine Liste aller unterschiedlichen Einträge mit Anzahl. Zum Modus siehe [cX.Stapel().Histogramm]. |
._Max(Name) | Ermitteln der Anzahl Einträge des Listeneintrags Name |
._Name(Index) | Ermitteln des Eintragsnamens an der per Index angegebenen Position |
._Leeren | Setzen auf: kein Inhalt, um alle Werte in Variablenbereich ID zu löschen, Wertename/-index zum Löschen eines einzelnen Eintrags oder Namensmaske für mehrere Elemente. Die Elemente bleiben erhalten, nur die Inhalte werden zurückgesetzt (siehe auch ._Löschen) |
._Löschen | Setzen auf: kein Inhalt, um alle Einträge in Variablenbereich ID zu löschen, Wertename/-index zum Löschen eines einzelnen Eintrags oder Namensmaske für mehrere Elemente. Die Elemente werden samt Inhalt aus der Liste entfernt (siehe auch ._Leeren) |
._Laden(Modus) | Setzen auf Dateinamen: Laden des mit _Speichern gespeicherten Variablenbereichs ID |
._Speichern(Modus) | Setzen auf Dateiname speichert den Dateninhalt in die Datei als Name=Wert-Liste In Modus kann jeweils der Datentyp angegeben werden (siehe unten bei _Serialisiert) |
._Liste(Modus) | Setzen auf eine mehrzeilige Liste mit Variablenname=Wert legt mehrere Inhalte auf einmal fest, Lesen liefert eine entsprechende Liste aller enthaltenen Variablen (auch z.B. nutzbar für Mehrfach-Setzen) Beim Lesen liefert Modus=1 nur die Namen, 2 nur die Werte. Wird hier 4 addiert, ergibt das eine sortierte Liste. |
._KopiereAusSkript | Setzen kopiert alle Benutzervariablen aus den Skriptvariablen in das Objekt (nur normale Variablen, keine Unterobjekte wie cX.Var- oder cX.Stapel) |
._KopiereInSkript | Setzen kopiert alle Benutzervariablen aus dem Objekt in die Skriptvariablen Mit diesen beiden Funktionen kann etwa eine Kopie der aktuellen Variableninhalte im Skript gesichert und wiederhergestellt werden. |
._KopiereAusSkript | Setzen auf Maske (oder leer) kopiert alle passenden (oder alle) Variablen aus den Skriptvariablen in das zuvor geleerte Objekt |
._KopiereInSkript | Setzen auf Maske (oder leer) kopiert alle passenden (oder alle) Variablen aus dem Objekt in die (zuvor geleerten) Skriptvariablen Hinweis: Mit diesen beiden Funktionen können beispielsweise erst alle Variablen gesichert und dann ein Var-Inhalt in die cX-Variablen überspielt werden. Danach könnte ein Vorlagen-Text, in dem die Var-Felder einfach als [Variablen] enthalten sind, direkt mit den Inhalten des Var-Objekts ausgefüllt werden (einfacher als jede Variable mit [cX.Var([VarId]).Feld] o.ä. auszuschreiben und die passende [VarId] zu setzen).. |
._Suche(Name;Wert;Maske) | Durchsucht alle definierten Var()-Objekte und liefert die ID des ersten, bei dem das angegebene Paar existiert. Der Wert kann als Maske angegeben werden. Optional kann noch eine Maske für die IDs der Var()-Objekte angegeben werden, welche durchsucht werden sollen. |
._SucheID(Wertemaske) | Liefert die erste ID des Eintrags, dessen Wert der angegebenen Maske entspricht. Optional kann mit zusätzlichem ;1 eine Liste aller passenden Eintrags-IDs angefordert werden. Wird ein dritter Parameter angegeben, ist dies der Maximalwert (Zahl oder Datum), wobei alle Einträge zwischen dem als Maske angegebenen Wert oder Datum und diesem ermittelt werden (etwa [cX.Var()._SucheID(20;1;30)] für alle IDs (1) mit Werten von 20 bis 30). |
._UnterschiedZu(Index) | Vergleicht den Var-Inhalt mit einem anderen per Index (ID des Vergleichs-Var) angegebenen und liefert eine Liste der Feldnamen, bei denen im anderen Var-Objekt der Inhalt abweicht oder nicht existiert. Existiert das andere Var-Objekt nicht, wird ein Fehler ausgelöst. |
Beispiel:
*** Demo der Var()-Objekte *** Einträge in [cX.Var(Zahlen)] einsetzen Setze in [cX.Var(Zahlen).Zahl1]: 'Eins' Setze in [cX.Var(Zahlen).Zahl2]: 'Zwei' Setze in [cX.Var(Zahlen).Zahl3]: 'Drei'
( Setze in [cX.Var(Zahlen)._Löschen]: 'Zahl2'
( Setze in [cX.Var(Zahlen)._Speichern]: 'TestSammlung.cxv' ( Setze in [cX.Var(Zahlen)._Laden]: 'TestSammlung.cxv'
*** Einträge aus [cX.Var(Zahlen)] holen Meldung "Anzahl: [cX.Var(Zahlen)._Anzahl]¶Zahl 1: [cX.Var(Zahlen).Zahl1] = [cX.Var(Zahlen).1]¶Zahl 2: [cX.Var(Zahlen).Zahl2] = [cX.Var(Zahlen).2]¶Zahl 3: [cX.Var(Zahlen).Zahl3] = [cX.Var(Zahlen).3]" (Titel: 'Info', Info, OK) |
Das Beispielskript zeigt, wie Var-Objekte zum Ablegen und Zugreifen auf Daten eingesetzt werden können. Die auskommentierten Zeilen stellen zudem noch andere Möglichkeiten vor, etwa das Löschen eines Eintrags aus der Liste oder das Speichern bzw. Laden des Inhalts.
Beispiel für _Editieren:
*** Beispielskript für das Bearbeiten eines Var-Eintrags in einem generierten Eingabedialog
*** Var-Element erstellen und füllen Setze in [cX.Var(Test1)._Liste]: 'Name=Dittrich¶Vorname=Stefan¶Registriert?=0¶Kundennr%=123¶Datum#=1.1.2017¶Guthaben!=123,4¶InterneNummer-=12345¶Combo|=:T...' *** Inhalt per generiertem Formular bearbeiten und Ergebnis anzeigen Wenn (? '[cX.Var(Test1)._Editieren(Eintrag bearbeiten)]=1') Meldung '[cX.Var(Test1)._Liste]', Titel 'Ergebnis nach Änderung:', Buttons 'OK, Abbrechen', Symbol 'Information' Ende Wenn |
Das Beispielskript zeigt, wie ein Var-Objekt mit verschiedenen Datentypen im Editierfenster angezeigt bzw. bearbeitet werden.
Beispiel als cX4Web-Code:
**cx5AR-LC AAAAAAABAC 1VM2OEkEQv pv4DsVsNEv Czw6uMQF6j QgqUfcghJC YjelhipnO9 vRMunuyi-H oo_gY3ngxq 5ufIRyWePA C9dddX331T fcnCy0Ke_P 8GUD_fSltq fEmxn57b28 TeZZxFRvvV T7s_qerAln gHFQ2gCk-W hYMUJhCoDT 3rgEsN380x NzAALmOUFh UgEKhgRnXz ZFQVvPEgNh GM0hQoRaoX R1lEx5hLLj MkwDaT8IYZ YVdnSs6weo hSHQhQG0sS kltSzpFsJ3 9j_d9EuqBx u-62QSPJK5 BGOsngy9kI VzW5izBh83 vVNoGdOeMb ojypjteb8A 9eh6IAyvFI kUNQ05E2FV xDsgE7b5nc OjOgsW8Rc7 lFI0N660fH kNAJ5W7lQW 3PEM2FNZq6 vby4nHYo59 3vVmulctML C65quLfMKE L_Hbesqsq_ pkYQ6X0CxZ 2XlVhwl5mF yxsha3OVfi mSnwsbUp7V TVX37iuEmP CpRXelsSqb rrs9esq66l as64jq7dTT rg3OnvjCIA fd80OpbUna gdoFqlGEZU q6RInJNDd6 sCx9z_UN1Y plxYKWnOl- gw-5DorJdc QVV-Mk-RIJ xgpYYCrn14 jZzVhubbjp d93LKzI1TY eHkVmXJYU- n4ilJHLokZ 1uWPqCEz9j oXnWn9FY3h CUpsK63R4w K74IoXNL9K LdkTvqTjt7 zd3d5Z0Fbv xtkX0dFWvV b-9e9_-Ags 977noBAAA= * |
cX-Webseite: http://www.clickexe.net