4D v16

Arrays, PopUps, Listboxen

Home

 
4D v16
Arrays, PopUps, Listboxen

Arrays, PopUps, Listboxen    


 

Diese Sequenz zeigt, wie Sie Arrays erstellen und programmieren und welche Objekte sich zum Darstellen in Formularen eignen.

Wie bei Variablen gilt für Arrays folgendes:

  • Es muss deklariert sein
  • Einen Wert enthalten
  • und dann verwendet werden

Wir erstellen ein Array im Eingabeformular der Tabelle Interventions.

Dieses Array dient für ein PopUp-Menü. Dazu müssen wir:

  1. Das Array im Speicher anlegen
  2. Im Formular ein Objekt zur Darstellung des Array setzen
  3. Prüfen, dass das Array die korrekte Information enthält
  4. Beim Wählen eines Wertes ihn in das Feld übertragen

Um es einfacher zu machen, setzen wir die Programmierung in das Objekt. So können wir auch Ereignisse noch einmal erläutern.

  • Wählen Sie das Listenobjekt PopUp/DropDown
  • Zeichnen Sie es rechts neben dem Feld Object
  • Nennen Sie es PopObjects (Variablenname)
  • Wir markieren die Ereignisse On Load und On Clicked

Dann bearbeiten wir die Methode wie folgt:

 $evt:=Form event
 Case of
    :($evt=On Load//Vor Anzeige des Formulars
       ARRAY TEXT(PopObjects;5) //Definition des Array (Typ, Name und Anzahl Elemente)
 
  //Die Elemente des Array füllen
       PopObjects{1}:="Training"
       PopObjects{2}:="Software"
       PopObjects{3}:="Hardware"
       PopObjects{4}:="Network"
       PopObjects{5}:="System"
 
    :($evt=On Clicked//Wenn der Benutzer ein Element im Array wählt
       If(PopObjects#0) //Wenn der Benutzer ein Element ausgewählt hat
          $ChosenElement:=PopObjects //Das gewählte Element speichern
          $ChosenValue:=PopObjects{$ChosenElement//In diesem Element enthaltenen Wert speichern
          [Interventions]Object:=$ChosenValue  //Wert dem Feld zuweisen
       End if
 End case

Die Objektmethode verwendet eine bestimmte Anzahl Elemente:

  • Zu Beginn Ereignis prüfen
  • Ist es "On Load", erstellen wir ein Array mit 5 Elementen, das 1. ist  "Training" usw.
  • Dann klicken wir auf das Objekt, der Transfer passiert hier im Objekt

Wir setzen einen Unterbrechungspunkt an der Beginner der Methode und testen sie im Schrittmodus.

Wir sehen, dass wir beim Öffnen des Formulars zu On Load gehen.

Wir können nun das Array mit 5 Elementen anzeigen, diese sind schrittweise zugewiesene Werte.
Der Einsatz erscheint.

Wählen wir einen Wert im Menü, sehen wir hier die Zeilennummer in einer Variablen. Sie hat denselben Namen wie das Array, jedoch den Typ Lange Ganzzahl. Wir sehen die Elemente 1 bis 5 und dann Null - mehr dazu später.

Wird diese Methode ausgeführt:

  • Ist das betroffene Ereignis On Clicked
  • Wir können prüfen, ob ein Element ausgewählt wurde
  • Wurde das Element ausgewählt, können wir:
    • Über die Zwischenvariable gehen (hier ChosenElement)
    • Den gewählten Wert herausfinden, schauen wir auf ChosenElement, sehen wir, dass es Hardware ist
    • Und den gewählten Wert auf das Objekt übertragen

Wir können diese 3 Zeilen durch 1 Zeile ersetzen:

 [Interventions]Object:=PopObjects{PopObjects}

Warum?

Weil dieser Wert hier die Ganzzahl-Variable mit den 3 vorigen ist, er gibt also die Zeilennummer des entsprechenden Array an (es hat denselben Namen).
Bei generischem Code finden Sie oft diese Art Syntax, die einen Zeiger auf das Objekt verwendet:

Da die Programmierung auf das Objekt selbst ausgeführt wird, bezieht sich OBJECT get pointer auf das Objekt. OBJECT get pointer(Object current)->{OBJECT get pointer(Object current)->} gibt das Array {an der gewählten Zeile im Array} an und wir übertragen den Inhalt direkt in das Objekt.

Wir prüfen im Schrittmodus, dass wir dasselbe Ergebnis erhalten.

  • Wir haben derzeit "system" im [Intervention] Objekt.
  • Zeigen wir PopObjects{PopObjects} an, haben wir "System"
  • Zeigen wir OBJECT get pointer(Object current)->{OBJECT get pointer(Object current)->}, haben wir auch "System"

Wir erstellen jetzt ein neues Array, in das wir ein Datum mit plus bzw. minus 10 Tagen eingeben können.

  • Popup Objekt duplizieren
  • Umbenennen in Popdates
  • Und seine Methode wie folgt ändern

 $evt:=Form event
 Case of
    :($evt=On Load)
       ARRAY DATE(Popdates;21)
 
       For($i;1;21)
          Popdates{$i}:=Current date+$i-11
       End for
    :($evt=On Clicked)
       If(Popdates#0)
          [Interventions]Date_Interventions:=OBJECT Get pointer(Object current)->{OBJECT Get pointer(Object current)->}
 
       End if
 
 End case

Dies ist ein Array Datum mit 21 Elementen: Heute + 10 Tage - 10 Tage
das ist die kompakteste Schreibweise dieses Code

Wie füllen wir diese Elemente nun auf? Wir setzen eine Schleife, in der wir dem Array einen Wert wie folgt zuweisen: (Current date + $i-11).

Das Array hat natürlich den korrekten Namen. Jetzt können wir es testen:
Wir sehen hier, dass der Wert beim Auswählen im Array neben das Einsatzdatum gesetzt wird.

Da Sie nun die Programmierung von Arrays kennen, können Sie sie in Objekten darstellen, z.B. Listboxen.

Eine Listbox ist ein Objekt aus einer oder mehreren Spalten mit Titeln. Hier interessiert uns die Spalte, in der wir einfach den Namen des Array schreiben, das wir im Speicher verwalten.

Geben wir nun einen Einsatz zurück, enthält die Listbox die verschiedenen Werte des Array und wir sehen die direkte Synchronisation zwischen Listbox und Array.

Wir programmieren die Listbox genauso, so dass sich der Wert des Objekts beim Anklicken oder einer neuen Auswahl darin automatisch ändert.

Dazu markieren wir in der Listbox die Ereignisse On Clicked und On Selection Change.

Sie müssen nur folgende Zeile in die Objektmethode der Listbox kopieren:

 [Interventions]Object:=PopObjects{PopObjects}

Wählen wir beim Benutzen mit der Maus oder den Pfeiltasten einen Wert in der Listbox aus, werden die Werte automatisch übertragen. Nun sollte das Formular in etwa so aussehen:

Natürlich lässt sich, dort wo die Bereiche drag- oder dropfähig sind, auch Drag-and-Drop verwenden.

Hier sollten Sie folgendes beachten:

Arrays sind eine unverzichtbare Funktionalität vieler Programmiersprachen. Sie sind praktisch, unbegrenzt, dynamisch, ein- oder zweidimensional, sie sind ein “Raum” im Speicher, der sich in Formularen über Objekte wie PopUps, Comboboxen, Listboxen, rollbare Bereiche, etc. anzeigen lässt.

Wir haben bereits das Konzept und die Verwendung von einwertigen Variablen behandelt. Ein Array ist eine mehrwertige Variable, die wir für jedes seiner Elemente lesen oder schreiben können.

Wir definieren ein Array durch Festlegen der darin enthaltenen Zeilen und des Typs. Nachfolgende Übersicht zeigt die verschiedenen Stadien einer Variablen und die Lebensdauer eines Array:

SchrittEinfache VariableArray Variable
InitialisierungC_TEXT(vText)ARRAY TEXT(ArrayText;10) `10 Zeilen
BewertungvText:="Klassiksammlung"ArrayText{1}:="Bach" `Zeile 1
ArrayText{2}:="Beethoven" `Zeile 2
ArrayText{3}:="Bruckner" `Zeile 3
...
Verwendung$NumChar:=Length(vText)$Amant:=ArrayText{1}
Inhalt entfernenCLEAR VARIABLE(vText)ARRAY TEXT(ArrayText;0)
(unterschiedliches Verhalten in interpretierter und kompilierter
Anwendung, mehr dazu siehe 4D Dokumentation)
Ansicht im FormularDen Variablennamen einem Objekt vom Typ Variable übergebenDen Variablennamen einem Objekt vom Typ rollbarer Bereich/PopUp-Menü übergeben
TypenGanzzahl, Lange Ganzzahl, Zahl, Alpha, Text, Boolean, Datum, Zeit, Bild, BLOB, ZeigerIdentisch zu Variablentypen außer Zeit und BLOB

Wie Sie sehen, haben Variablen und Arrays viele Ähnlichkeiten.

Der Name eines Array wird manchmal mit geschweiften Klammern { }, manchmal direkt verwendet. In diesem Fall ist es eine Variable vom Typ Lange Ganzzahl, die 4D automatisch anlegt. Diese einem Array zugewiesene Variable dient als ein Array Index (Zeilennummer). Über diese Variable erfahren wir, welche Zeile der Benutzer ausgewählt hat oder erzwingen die Auswahl einer spezifischen Zeile im PopUp-Menü.

Das ist, was wir oft mit der spezifischen Syntax in Anwendungen sehen:

 [INTERVENTIONS]Object:=ObjectsArr{ObjectsArr}

Wir können es folgendermaßen entschlüsseln: "Objekt := Array Inhalt {bei der ausgewählten Zeile}"
Sie finden auch folgende Syntax, die noch präziser und generischer ist. Sie verwendet die Funktion OBJECT get pointer(Object current) mit einem Zeiger auf das Objekt, dessen Methode ausgeführt wird:

In 4D ist eine Registerkarte ein einmaliges Objekt mit mehreren Titeln (Werte). Es ist ein Beispiel für ein Oberflächenobjekt, das ein Array darstellen kann. In der Regel setzen wir Registerkarten auf Seite 0 im Formular (mehr dazu siehe Kapitel "Seite 0 und Seite 1").

Wie Sie sehen, werden Arrays rasch recht nützlich und bald zur Notwendigkeit.

Ein Array enthält nur Einträge vom gleichen Typ. Sie können kein Array haben mit einem Element Alpha, einem Element Datum und einem dritten Element Zeit. In diesem Fall können Sie ein Array mit Zeigern verwenden, die auf Variablen unterschiedlicher Typen zeigen.

Wie bereits im Kapitel zu Zeigern erwähnt, können Sie Zeiger und Arrays kombinieren zu “Zeiger Arrays”.

Sie können auch eine Listbox verwenden, in der jede Spalte mit einem anderen Array (derselben Größe) verbunden ist.

Es ist ein Objekt, das ein oder mehrere Arrays gruppiert und synchronisiert.

In einer Listbox können Sie folgendes konfigurieren:

  • Die Listbox selbst
  • Jede Titelzeile der Spalte
  • Und jede Spalte

Bei einer Listbox mit X Spalten haben Sie 2X+1 Objekte (X Spalten, X Titel + 1 Listbox).

Mit Listboxen können Sie:

  • Daten eingeben
  • Zeilen und Spalten sortieren und bewegen
  • Wechselnde Farben anzeigen
  • Daten hierarchisch anzeigen
  • In Fußzeilen Gesamtsummen hinzufügen
  • Eine Listbox lässt sich, wie hier, mit Arrays oder mit Feldern der aktuellen bzw. der temporären Auswahl einer Tabelle synchronisieren
  • usw.

Beachten Sie, dass die Listbox ihre Spalten synchronisiert; sie nimmt dafür die kleinste Anzahl der Zeilen aus dem Array. So kann es vorkommen, dass Sie Arrays haben, die mit Daten gefüllt sind, und trotzdem mit einer leeren Listbox enden, wenn eins ihrer Arrays leer ist.

 
 

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Arrays, PopUps, Listboxen

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

Self-Training ( 4D v16)