4D v16.3

Objekt Arrays in Spalten von Listboxen (4D View Pro)

Home

 
4D v16.3
Objekt Arrays in Spalten von Listboxen (4D View Pro)

Objekt Arrays in Spalten von Listboxen (4D View Pro)  


 

 

Ab 4D v15 können Spalten von Listboxen Arrays vom Typ Objekt verwalten. Da diese Arrays unterschiedliche Datentypen erlauben, ermöglicht dieses leistungsstarke Feature, jetzt in den Zeilen einer Spalte verschiedene Eingabetypen zu mischen und auch unterschiedliche Widgets anzuzeigen. Sie können z.B. in der ersten Zeile eine Texteingabe, in der zweiten ein Optionsfeld und in der dritten ein DropDown-Menü setzen. Objekt Arrays ermöglichen auch Zugriff auf neue Widget-Typen, wie Schaltflächen oder Farbpaletten.

Die folgende Listbox wurde mit einem Objekt Array gestaltet:

Hinweis zur Lizensierung: Der Einsatz von Objekt Arrays in Listboxen ist der erste Schritt für das geplante Tool "4D View Pro", das dann nach und nach das Plug-In 4D View ersetzen wird. Deshalb benötigen Sie zur Nutzung dieser Funktionalität eine gültige 4D View Lizenz. Weitere Informationen dazu finden Sie auf der 4D Web Site.

Um ein Objekt Array einer Spalte der Listbox zuzuordnen, setzen Sie den Namen des Objekt Array entweder in der Eigenschaftenliste im Feld "Variablenname" oder im Befehl LISTBOX INSERT COLUMN, genauso wie für eine Spalte mit zugeordnetem Array. In der Eigenschaftenliste können Sie jetzt für die Spalte als Variablentyp Objekt auswählen:

Für Spalten vom Typ Objekt sind Standardeigenschaften zu Koordinaten, Größe und Stil verfügbar. Sie können über die Eigenschaftenliste oder per Programmierung Stil, Schriftfarbe und Ein-/Ausblenden für jede Zeile einer Spalte vom Typ Objekt definieren. Solche Spalten lassen sich auch ausblenden.

Für objektbasierte Spalten der Listbox ist die Gruppe Datenquelle nicht verfügbar. Der Inhalt jeder Zelle der Spalte richtet sich nach den Attributen, die dem jeweiligen Element des Objekt Array zugewiesen ist. Jedes Objekt Element kann folgendes definieren:

  • Wertetyp (zwingend): Text, Farbe, Ereignis...
  • Eigentlicher Wert (optional): wird für Eingabe/Ausgabe verwendet
  • Anzeige des Zelleninhalts (optional): Schaltfläche, Liste...
  • Zusätzliche Einstellungen (optional): richtet sich nach dem Wertetyp

Um diese Eigenschaften zu definieren, müssen Sie im Objekt passende Attribute setzen (Liste siehe unten). Sie können z.B. "Hello World!" in einer Spalte vom Typ Objekt mit folgendem Code schreiben :

 ARRAY OBJECT(obColumn;0) //Spalten Array
 C_OBJECT($ob//erstes Element
 OB SET($ob;"valueType";"text") //definiert den Wertetyp (zwingend)
 OB SET($ob;"value";"Hello World!") //definiert den Wert
 APPEND TO ARRAY(obColumn;$ob)

Hinweis: Für eine Spalte vom Typ Objekt lassen sich keine Anzeigeformate und Eingabefilter setzen. Diese richten sich automatisch nach dem Typ des Werts.

Wird eine Spalte der Listbox einem Objekt Array zugewiesen, basiert die Anzeige, Eingabe oder Bearbeitung der Zelle auf dem Attribut "valueType" des Array Elements. Es gibt folgende Werte:

  • "text" für einen Wert vom Typ Text
  • "real" für eine Zahl inkl. Trennern wie <Abstand>, <.>, oder <,>
  • "integer" für einen Wert Ganzzahl
  • "boolean" für einen Wert wahr/falsch
  • "color" zum Definieren einer Hintergrundfarbe
  • "event" zum Anzeigen einer Schaltfläche mit Bezeichnung

4D verwendet Standard Widgets für den Wertetyp, z.B. "text" wird als Widget für Texteingabe angezeigt, "boolean" als Optionsfeld. Über Optionen sind auch Alternativen verfügbar. So lässt sich ein Boolean Wert auch als DropDown-Liste mit den Optionen "ja"/"nein" darstellen. Nachfolgende Tabelle zeigt die verschiedenen Möglichkeiten:

WertetypStandard WidgetAlternative Widget(s)
textTexteingabeDropdown-Menü (Erforderlich-Liste) oder Combobox (Auswahlliste)
realvorgegebene Eingabe (Zahlen und Trenner)Dropdown-Menü (Erforderlich-Liste) oder Combobox (Auswahlliste)
integervorgegebene Eingabe (nur Zahlen)Dropdown-Menü (Erforderlich-Liste), Combobox (Auswahlliste) oder Optionsfeld mit drei Stadien
booleanOptionsfeldDropdown-Menü (Erforderlich-Liste)
colorHintergrundfarbeText
eventSchaltfläche mit BezeichnungAlle Widgets können eine zusätzliche Schaltfläche zum Wählen der Einheit (unit toggle button) oder für weitere Optionen (...) (ellipsis button) haben, die der Zelle zugeordnet ist

Sie können die Zellenanzeige und Optionen über spezifische Attribute in jedem Objekt anpassen (siehe unten).

Für Spalten vom Typ Objekt können Sie keine Anzeigeformate oder Eingabefilter setzen. Sie werden automatisch gemäß dem Typ des Werts definiert. Es gibt folgende Optionen:

WerteTypStandardformatEingabekontrolle
textso wie in Objekt definiertbeliebig (keine Kontrolle)
realso wie in Objekt definiert (mit Dezimaltrenner des Systems)"0-9" und "." und "-"
"0-9" und "." wenn min>=0
integerso wie in Objekt definiert"0-9" und "-"
"0-9" wenn min>=0
booleanOptionsfeld-
color--
event--

Jedes Element des Objekt Array ist ein Objekt mit einem oder mehreren Attributen, die den Inhalt der Zelle und die Anzeige der Daten definieren (siehe Beispiel oben).

Nur das Attribut "valueType" ist zwingend, unterstützt werden "text", "real", "integer", "boolean", "color" und "event". Nachfolgende Tabelle zeigt alle Attribute, die abhängig vom Typ, in Objekt Arrays in Listboxen unterstützt werden (alle anderen Attribute werden ignoriert). Details zu den Anzeigeformaten und Beispiele siehe unten.

valueTypetextrealintegerbooleancolorevent
AttributBeschreibung
valueZellenwert (Eingabe oder Ausgabe)xxxxx
minMindestwertxx
maxMaximumwertxx
behavior"DreiStadien" Wertx
requiredListIm Objekt definierte Dropdown-Listexxx
choiceListIn Objekt definierte Comboboxxxx
requiredListReference4D Listenref, richtet sich nach "SichernAls" Wertxxx
requiredListName4D Listenname, richtet sich nach "SichernAls" Wertxxx
saveAs"Referenz" oder "Wert"xxx
choiceListReference4D Listenref, Anzeige Comboboxxxx
choiceListName4D Listenname, Anzeige Comboboxxxx
unitListArray mit n Elementenxxx
unitReferenceIndex des gewählten Elementsxxx
unitsListReference4D Listenref für Einheitenxxx
unitsListName4D Listenname für Einheitenxxx
alternateButtonWechsel-Schaltfläche hinzufügenxxxxx
Wert  

Zellenwerte werden im Attribut "value" gespeichert. Es wird für Eingabe und Ausgabe verwendet.

Beispiel:

 ARRAY OBJECT(obColumn;0) //Spalten Array
 C_OBJECT($ob1)
 $entry:="Hello world!"
 OB SET($ob1;"valueType";"text")
 OB SET($ob1;"value";$entry)
 C_OBJECT($ob2)
 OB SET($ob2;"valueType";"integer")
 OB SET($ob2;"value";2/3)
 C_OBJECT($ob3)
 OB SET($ob3;"valueType";"boolean")
 OB SET($ob3;"value";True)
 
 APPEND TO ARRAY(obColumn;$ob1)
 APPEND TO ARRAY(obColumn;$ob2)
 APPEND TO ARRAY(obColumn;$ob3)

Ist "valueType" vom Typ "real" oder "integer", erlaubt das Objekt auch min und max Attribute mit passenden Werten (die Werte müssen vom gleichen Typ wie der Wertetyp sein). 

Damit können Sie den Bereich von Eingabewerten steuern, wenn die Zelle bestätigt wurde, d.h. wenn sie den Fokus verliert:

  • Ist der Eingabewert kleiner als der Mindestwert (min), wird er abgewiesen: Der vorige Wert bleibt bestehen und es erscheint eine Meldung mit Erklärung.
  • Ist der Eingabewert größer als der Maximumwert (max), wird er abgewiesen: Der vorige Wert bleibt bestehen und es erscheint eine Meldung mit Erklärung.

Beispiel:

 C_OBJECT($ob3)
 $entry3:=2015
 OB SET($ob3;"valueType";"integer")
 OB SET($ob3;"value";$entry3)
 OB SET($ob3;"min";2000)
 OB SET($ob3;"max";3000)

Das Attribut "behavior" bietet Variationen zur regulären Darstellung von Werten. In 4D v15 ist folgende Variante verfügbar:

AttributVerfügbare WerteWerteTyp(en)Beschreibung
behaviorthreeStatesGanzzahlZeigt einen numerischen Wert als Optionsfeld mit drei Stadien. 2=halb-markiert, 1=markiert, 0=nicht markiert, -1=unsichtbar, -2=nicht markiert ist deaktiviert, -3=markiert ist deaktiviert, -4=halb-markiert ist deaktiviert

Beispiel:

 C_OBJECT($ob3)
 OB SET($ob3;"valueType";"integer")
 OB SET($ob3;"value";-3)
 C_OBJECT($ob4)
 OB SET($ob4;"valueType";"integer")
 OB SET($ob4;"value";-3)
 OB SET($ob4;"behavior";"threeStates")

Ist im Objekt ein Attribut "choicelist" oder "requiredList" vorhanden, wird die Texteingabe je nach Typ durch eine DropDown-Liste oder eine Combobox ersetzt:

  • Beim Attribut "choicelist" wird die Zelle als Combobox angezeigt, d.h. der Benutzer kann einen Wert auswählen oder eingeben.
  • Beim Attribut "requiredList" wird die Zelle als DropDown-Liste angezeigt, d.h. der Benutzer kann nur einen der vorgegebenen Werte auswählen.

In beiden Fällen wird über das Attribut "value" ein Wert im Widget vorab ausgewählt.

Hinweis: Die Werte des Widget werden über ein Array definiert. Wollen Sie dem Widget eine vorhandene 4D Liste zuweisen, müssen Sie die Attribute "requiredListReference", "requiredListName", "choiceListReference", oder "choiceListName" verwenden.

Beispiele:

  • Eine DropDown-Liste mit den beiden Optionen "Open" oder "Closed" anlegen, wobei "Closed" vorab ausgewählt ist:
     ARRAY TEXT($RequiredList;0)
     APPEND TO ARRAY($RequiredList;"Open")
     APPEND TO ARRAY($RequiredList;"Closed")
     C_OBJECT($ob)
     OB SET($ob;"valueType";"text")
     OB SET($ob;"value";"Closed")
     OB SET ARRAY($ob;"requiredList";$RequiredList)

  • Jeden Wert vom Typ Ganzzahl zulassen, jedoch eine Combobox mit den am häufigsten verwendeten Werten anzeigen:
     ARRAY LONGINT($ChoiceList;0)
     APPEND TO ARRAY($ChoiceList;5)
     APPEND TO ARRAY($ChoiceList;10)
     APPEND TO ARRAY($ChoiceList;20)
     APPEND TO ARRAY($ChoiceList;50)
     APPEND TO ARRAY($ChoiceList;100)
     C_OBJECT($ob)
     OB SET($ob;"valueType";"integer")
     OB SET($ob;"value";10) //10 als Standardwert
     OB SET ARRAY($ob;"choiceList";$ChoiceList)

Über die Attribute "requiredListName" und "requiredListReference" können Sie in einer Zelle der Listbox eine in 4D definierte Liste anzeigen, die entweder über die Toolbox im Designmodus oder über den Befehl New list erstellt wurde. Die Zelle erscheint dann als DropDown-Liste, d.h. der Benutzer kann nur einen der vorgegebenen Werte auswählen.

Je nachdem, wo die Liste angelegt wird, wählen Sie "requiredListName" oder "requiredListReference": Stammt sie von der Toolbox, übergeben Sie einen Namen, wurde Sie per Programmierung erstellt, übergeben Sie eine Referenz. In beiden Fällen lässt sich über das Attribut "value" im Widget ein Wert vorab auswählen.

Hinweis: Wollen Sie die Werte über ein einfaches Array definieren, müssen Sie das Attribut "requiredList" verwenden.

In diesem Fall definiert das Attribut "saveAs", ob der gewählte Eintrag als "value" oder "reference" gespeichert wird.

  • Ist "saveAs" = "reference", wird es als Referenz gesichert. "valueType" muss vom Typ Zahl oder Ganzzahl sein.
  • Ist "saveAs" = "value", wird der Wert gesichert. "valueType" muss vom gleichen Typ wie die Werte der Liste sein, in der Regel "text" oder "integer", andernfalls versucht 4D, den Wert der Liste in das Objekt "valueType" zu konvertieren (siehe Beispiele unten).

Weitere Informationen dazu finden Sie im Abschnitt Als Wert oder Referenz sichern des Handbuchs Designmodus.

Hinweis: Enthält die Liste Texteinträge mit Zahlenwerten, muss der Dezimaltrenner ein Punkt (".") sein, unabhängig von den lokalen Einstellungen. Beispiel: "17.6" "1234.456".

Beispiele:

  • Eine DropDown Liste mit der Liste "colors" anzeigen, die in der Toolbox definiert wurde (mit den Werten "blue", "yellow" und "green"), als Wert sichern und standardmäßig "blue" anzeigen:

     C_OBJECT($ob)
     OB SET($ob;"valueType";"text")
     OB SET($ob;"saveAs";"value")
     OB SET($ob;"value";"blue")
     OB SET($ob;"requiredListName";"Farben")

  • Eine DropDown Liste mit einer per Programmierung erstellten Liste anzeigen, als Referenz sichern und standardmäßig London anzeigen:
     <>List:=New list
     APPEND TO LIST(<>List;"Paris";1)
     APPEND TO LIST(<>List;"London";2)
     APPEND TO LIST(<>List;"Berlin";3)
     APPEND TO LIST(<>List;"Madrid";4)
     C_OBJECT($ob)
     OB SET($ob;"valueType";"Ganzzahl")
     OB SET($ob;"saveAs";"reference")
     OB SET($ob;"value";2) //zeigt standardmäßig London an
     OB SET($ob;"requiredListReference";<>List)

Über die Attribute "choiceListName" und "choiceListReference" können Sie in einer Zelle der Listbox eine in 4D definierte Liste anzeigen, die entweder über die Toolbox im Designmodus oder über den Befehl New list erstellt wurde. Die Zelle erscheint dann als DropDown-Liste, d.h. der Benutzer kann einen Wert auswählen oder eintippen.

Je nachdem, wo die Liste angelegt wird, wählen Sie "choiceListName" oder "choiceListReference": Stammt sie von der Toolbox, übergeben Sie einen Namen, wurde Sie per Programmierung erstellt, übergeben Sie eine Referenz. In beiden Fällen lässt sich über das Attribut "value" im Widget ein Wert vorab auswählen.

Hinweis: Wollen Sie die Werte über ein einfaches Array definieren, müssen Sie das Attribut "choiceList" verwenden.

In diesem Fall lässt sich das Attribut "saveAs" nicht verwenden. Ausgewählte Einträge werden automatisch als "value" gesichert.

Hinweis: Enthält die Liste Texteinträge mit Zahlenwerten, muss der Dezimaltrenner ein Punkt (".") sein, unabhängig von den lokalen Einstellungen. Beispiel: "17.6" "1234.456".

Beispiel:

Eine Combobox mit der Liste "colors" anzeigen, die in der Toolbox definiert wurde (mit den Werten "blue", "yellow" und "green"), "blue" standardmäßig auswählen:


 C_OBJECT($ob)
 OB SET($ob;"valueType";"text")
 OB SET($ob;"value";"blue")
 OB SET($ob;"choiceListName";"colors")

Sie können spezifische Attribute für Einheiten verwenden, die Zellenwerten zugeordnet sind, wie z.B. "10 cm", "20 Pixel". Dafür können Sie folgende Attribute verwenden:

  • "unitsList": Ein Array mit n Elementen zum Definieren der verfügbaren Einheiten, wie "cm", "inches", "km", "miles", etc. Damit definieren Sie Einheiten innerhalb des Objekts.
  • "unitsListReference": Referenz auf eine 4D Liste mit den verfügbaren Einheiten. Damit definieren Sie Einheiten über eine 4D Liste, die mit dem Befehl New list erstellt wurde.
  • "unitsListName": Name einer im Designmodus angelegten 4D Liste mit den verfügbaren Einheiten. Damit definieren Sie Einheiten über eine 4D Liste, die in der Toolbox angelegt wurde.

Jede dieser Einheitenliste lässt sich über folgendes Attribut zuordnen:

  • "unitsReference": Ein einzelner Wert mit dem Index (von 1 zu n) des gewählten Eintrags in der Werteliste "unitsList", "unitsListReference" oder "unitsListName".

Die aktuelle Einheit wird als Schaltfläche angezeigt, die bei jedem Anklicken die Werte von "unitsList", "unitsListReference" oder "unitsListName" durchläuft ("Pixel" -> "Zeilen" -> "cm" -> "Pixel" -> etc.)

Beispiel: Die numerische Eingabe mit den beiden Einheitenvarianten "Zeilen" oder "Pixel" einrichten. Der aktuelle Wert ist "2" + "Zeilen". Wir verwenden Werte, die direkt im Objekt definiert wurden (Attribut "unitsList"):

 ARRAY TEXT($_units;0)
 APPEND TO ARRAY($_units;"Zeilen")
 APPEND TO ARRAY($_units;"Pixel")
 C_OBJECT($ob)
 OB SET($ob;"valueType";"integer")
 OB SET($ob;"value";2) // 2 "units"
 OB SET($ob;"unitsReference";1) //"Zeilen"
 OB SET ARRAY($ob;"unitsList";$_units)

Um in einer Zelle die Schaltfläche [...] hinzuzufügen, müssen Sie im Objekt "alternateButton" mit dem Wert True übergeben. Die Schaltfläche erscheint automatisch in der Zelle.

Klickt der Benutzer auf diese Schaltfläche, wird das Ereignis On Alternate Click generiert, das Sie nach eigenen Wünschen verwalten können. Weitere Informationen dazu finden Sie im Abschnitt "Ereignisverwaltung".

Beispiel:

 C_OBJECT($ob1)
 $entry:="Hello world!"
 OB SET($ob;"valueType";"text")
 OB SET($ob;"alternateButton";True)
 OB SET($ob;"value";$entry)

Über valueType "color" können Sie entweder eine Farbe oder einen Text anzeigen.

  • Ist der Wert eine Zahl, wird die Zelle farbig ausgefüllt. Beispiel:
     C_OBJECT($ob4)
     OB SET($ob4;"valueType";"color")
     OB SET($ob4;"value";0x00FF0000)


    Wird die Zelle angeklickt, öffnet sich die Farbpalette des Systems mit der aktuell gewählten Farbe der Zelle. Der Benutzer kann eine andere Farbe wählen.
  • Ist der Wert ein Text, wird der Text angezeigt, z.B. "value";"Automatic".

valueType "event" zeigt eine einfache Schaltfläche, die bei Anklicken das Ereignis On Clicked generiert. Es lassen sich keine Daten oder Werte übergeben bzw. zurückgeben.

Optional können Sie ein Attribut "label" übergeben. 

Beispiel:

 C_OBJECT($ob)
 OB SET($ob;"valueType";"event")
 OB SET($ob;"label";"Edit...")

In Listboxen mit einem Objekt Array lassen sich verschiedene Ereignisse verwalten:

  • On Data Change: Ein Ereignis On Data Change wird ausgelöst, wenn ein Wert geändert wird in:
    • einem Bereich für Texteingabe
    • einer DropDown Liste
    • einem Bereich Combobox
    • einer Schaltfläche für Einheit (Wechsel von Wert n zu Wert n+1)
    • einem Optionsfeld (Wechsel markiert/nicht markiert)
  • On Clicked: Klickt der Benutzer auf eine Schaltfläche, die über das Attribut valueType "event" installiert wurde, wird ein Ereignis On Clicked generiert. Dieses Ereignis verwaltet der Entwickler.
  • On Alternative Click: Klickt der Benutzer auf eine Schaltfläche [...] (Attribut "alternateButton"), wird ein Ereignis On Alternative Click generiert. Dieses Ereignis verwaltet der Entwickler.

Hinweis: On Alternative Click ist der neue Name für das Ereignis On Arrow Click, das in bisherigen 4D Versionen schon verfügbar war. Es wurde umbenannt, da seine Reichweite in 4D v15 erweitert wurde.

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Listbox

 
GESCHICHTE 

Erstellt: 4D v15

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)