4D v13.4Einführung in Listboxen |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v13.4
Einführung in Listboxen
|
Befehl Objekteigenschaften | Objekt | Spalten | Kopfteile der Spalten | Fußteile der Spalten |
OBJECT MOVE | X | |||
OBJECT GET COORDINATES | X | |||
OBJECT SET RESIZING OPTIONS | X | |||
OBJECT GET RESIZING OPTIONS | X | |||
OBJECT SET FILTER | X | |||
OBJECT SET FORMAT | X | X | ||
OBJECT SET ENTERABLE | X | |||
OBJECT SET CHOICE LIST NAME | X | |||
OBJECT SET TITLE | X | |||
OBJECT SET COLOR | X | X | X | X |
OBJECT SET RGB COLORS | X | X | X | X |
OBJECT SET FONT | X | X | X | X |
OBJECT SET FONT SIZE | X | X | X | X |
OBJECT SET FONT STYLE | X | X | X | X |
OBJECT SET HORIZONTAL ALIGNMENT | X | X | X | X |
OBJECT Get horizontal alignment | X | X | X | X |
OBJECT SET VERTICAL ALIGNMENT | X | X | X | X |
OBJECT Get vertical alignment | X | X | X | X |
OBJECT SET VISIBLE | X | X | X | X |
OBJECT SET SCROLLBAR | X | |||
OBJECT GET BEST SIZE | X | X | X | X |
Hinweis: Bei Listboxen vom Typ Array lassen sich Stil, Farbe für Schrift oder Hintergrund und Sichtbarkeit für jede Zeile getrennt angeben. Dies wird über Arrays verwaltet, die der Listbox in der Eigenschaftenliste zugewiesen werden. Über den Befehl LISTBOX GET ARRAYS können Sie die Namen dieser Arrays per Programmierung herausfinden.
Sie können eine Objektmethode einem Objekt bzw. einer Spalte der Listbox hinzufügen. Objektmethoden werden in folgender Reihenfolge aufgerufen:
Verwenden Sie den Befehl OBJECT SET VISIBLE mit einem Spaltentitel, gilt er für alle Titel der Listbox, unabhängig vom Titel, der im Befehl übergeben wurde. So blendet die Anweisung OBJECT SET VISIBLE(*;"header3";False) alle Spaltentitel im Objekt Listbox aus, zu denen „header3“ gehört und nicht allein diesen Titel.
Um die Sichtbarkeit dieser Objekte über den Befehl OBJECT SET VISIBLE zu verwalten, müssen sie in der Listbox auf der Ebene des Formulareditors angezeigt werden, d.h. für das Objekt muss in der Eigenschaftenliste die Option Kopfteil anzeigen bzw. Fußteil anzeigen markiert sein.
Die Funktion OBJECT Get pointer wird mit der Konstante Object with focus oder Object current verwendet (früher die Funktionen Focus object und Self). Sie lässt sich in der Objektmethode einer Listbox bzw. einer Spalte der Listbox verwenden. Sie geben einen Zeiger auf die Listbox, die Spalte der Listbox (1) oder die Variable des Kopfteils zurück. Nachfolgende Tabelle zeigt die Funktionsweise im Einzelnen:
Ereignis | Object with focus | Object current |
On Clicked | Listbox | Spalte |
On Double Clicked | Listbox | Spalte |
On Before Keystroke | Spalte | Spalte |
On After Keystroke | Spalte | Spalte |
On After Edit | Spalte | Spalte |
On Getting Focus | Spalte oder Listbox (*) | Spalte oder Listbox (*) |
On Losing Focus | Spalte oder Listbox (*) | Spalte oder Listbox (*) |
On Drop | Listbox Quelle | Listbox (*) |
On Drag Over | Listbox Quelle | Listbox (*) |
On Begin Drag Over | Listbox | Listbox (*) |
On Mouse Enter | Listbox (**) | Listbox (**) |
On Mouse Move | Listbox (**) | Listbox (**) |
On Mouse Leave | Listbox (**) | Listbox (**) |
On Data Change | Spalte | Spalte |
On Selection Change | Listbox (**) | Listbox (**) |
On Before Data Entry | Spalte | Spalte |
On Column Moved | Listbox | Spalte |
On Row Moved | Listbox | Listbox |
On Column Resize | Listbox | Spalte |
On Header Click | Listbox | Kopfteil |
On Footer Click | Listbox | Fußteil |
On After Sort | Listbox | Kopfteil |
(*) Wird der Fokus innerhalb einer Listbox geändert, wird ein Zeiger auf die Spalte zurückgegeben. Wird der Fokus auf der übergeordneten Formularebene geändert, wird ein Zeiger auf die Listbox zurückgegeben. Bei einer Objektmethode einer Spalte wird ein Zeiger auf die Spalte zurückgegeben.
(**) Wird nicht ausgeführt im Kontext einer Objektmethode einer Spalte.
(1) Wird ein Zeiger auf eine Spalte zurückgegeben, richtet sich das angezeigte Objekt nach der Art der Listbox. Bei einer Listbox vom Typ Array gibt die Funktion OBJECT Get pointer einen Zeiger auf die Spalte in der Listbox mit Fokus zurück (z.B. gegen ein Array). Über den Zeiger können Sie die Eintragsnummer des geänderten Array sehen. Nehmen wir an, der Benutzer hat die 5. Zeile in Spalte Sp2 geändert:
$Column:=OBJECT Get pointer(Object with focus)
` $Column enthält einen Zeiger auf Sp2
$Row:=$Column-> `$Row ist gleich 5
Bei einer Listbox vom Typ Auswahl, gibt die Funktion OBJECT Get pointer folgendes zurück:
Der Befehl OBJECT SET SCROLL POSITION lässt sich mit einer Listbox verwenden. Er scrollt in den Zeilen, so dass die erste gewählte oder angegebene Zeile angezeigt wird.
Mit dem Befehl EDIT ITEM im Kapitel “Eingabekontrolle” können Sie eine Zelle des Objekts Listbox in den Bearbeitungsmodus setzen.
Wird REDRAW (Kapitel "Benutzeroberfläche) auf eine Listbox vom Typ Auswahl angewandt, löst er die Aktualisierung der in der Listbox angezeigten Daten aus.
Die Funktion Displayed line number im Kapitel "Auswahl" funktioniert für Listboxen im Kontext des Formularereignisses On Display Detail.
Es gibt spezifische Formularereignisse zum Verwalten von Listboxen, insbesondere für Drag-and-Drop und Sortieroperationen. Weitere Informationen dazu finden Sie unter der Funktion Form event.
Drag-and-Drop von Daten in Listboxen wird über die Routinen Drop position und DRAG AND DROP PROPERTIES verwaltet. Sie wurden speziell an Listboxen angepasst.
Achtung! Verwechseln Sie nicht Drag-and-Drop mit Bewegen von Zeilen und Spalten. Dies wird von den Befehlen LISTBOX MOVED ROW NUMBER und LISTBOX MOVED COLUMN NUMBER unterstützt.
Damit eine Zelle der Listbox eingebbar ist, müssen folgende Bedingungen erfüllt sein:
Nehmen wir z.B. eine Listbox mit zwei Arrays, eins vom Typ Datum, das andere vom Typ Text. Das Array Datum ist nicht eingebbar, das Array Text ist eingebbar, solange noch kein Datum übertragen wurde.
Hier ist die Methode zur Spalte arrText:
Case of
:(Form event=On Before Data Entry) // eine Zelle erhält den Fokus
LISTBOX GET CELL POSITION(*;"lb";$col;$row)
// Identifikation der Zelle
If(arrDate{$row}<Current date) // ist das Datum früher als heute
$0:=-1 // Zelle ist NICHT eingebbar
Else
// sonst ist Zelle eingebbar
End if
End case
Hinweis: Ab 4D v13 wir das Ereignis On Before Data Entry vor On Getting Focus erzeugt.
Bei Anklicken des Spaltentitels führt die Listbox automatisch eine Standardsortierung der Spalten durch. Das ist die alphanumerische Sortierung der Spaltenwerte in aufsteigender bzw. absteigender Reihenfolge durch aufeinanderfolgende Klicks. Alle Spalten werden immer automatisch aufeinander abgestimmt. Um die Standardsortierung zu unterbinden, deaktivieren Sie für die Listbox die Eigenschaft “Sortierbar”.
Der Entwickler kann über den Befehl LISTBOX SORT COLUMNS bzw. durch Kombinieren der Formularereignisse On Header Click und On After Sort und 4D Befehlen zur Array-Verwaltung eigene Sortierungen einrichten. Weitere Informationen dazu finden Sie unter der Funktion Form event.
Hinweis: Die Spalteneigenschaft „Sortierbar“ gilt nur für Standardsortierungen des Benutzers. Der Befehl LISTBOX SORT COLUMNS berücksichtigt diese Eigenschaft nicht.
Über den Wert der Variablen für den Spaltentitel können Sie zusätzliche Information verwalten: die aktuelle Sortierung der Spalte im Lesemodus und die Anzeige des Sortierpfeils.
Auswahlen werden unterschiedlich verwaltet, je nachdem, ob die Listbox auf einem Array oder auf einer Auswahl basiert.
Listbox vom Typ Auswahl: Auswahlen werden von einer Menge mit Namen "Highlight Set" verwaltet. Diese Menge wird in den Eigenschaften der Listbox definiert und von 4D automatisch verwaltet: Wählt der Benutzer eine oder mehrere Zeilen in der Listbox, wird die Menge sofort aktualisiert. Sie können auch Befehle aus dem Kapitel "Mengen" verwenden, um die Auswahl der Listbox per Programmierung zu verändern.Über die der Listbox zugeordnete Variable können Sie Auswahlen von Objektzeilen erhalten, setzen oder speichern. Diese Variable ist ein Array vom Typ Boolean, die 4D automatisch erstellt und pflegt. Die Größe des Array richtet sich nach der Größe der Listbox: Sie enthält dieselbe Anzahl Elemente wie das kleinste mit Spalten verknüpfte Array.
Jedes Element des Array gibt Wahr zurück, wenn die entsprechende Zeile gewählt ist, sonst Falsch. 4D aktualisiert den Inhalt dieses Array gemäß den Benutzeraktionen. Umgekehrt können Sie den Wert von Elementen im Array verändern, um die Auswahl in der Listbox zu ändern.
Dagegen können Sie in diesem Array weder Zeilen einfügen, überschreiben noch löschen.
Hinweis: Über die Funktion Count in array finden Sie die Anzahl der gewählten Zeilen.
Mit der folgenden Methode können Sie die Auswahl der ersten Zeile in der Listbox vom Typ Array invertieren:
ARRAY BOOLEAN(tBListBox;10)
` tBListBox ist der Name der Listbox Variablen im Formular
If(tBListBox{1}=True)
tBListBox{1}:=False
Else
tBListBox{1}:=True
End if
Ab 4D v12 lassen sich Listboxen auch drucken. Es gibt zwei Druckmodi: Vorschau, um eine Listbox wie ein Formularobjekt zu drucken und Erweitert, um direkt das Drucken des Objekts Listbox innerhalb des Formulars zu steuern. Über eine neue Eigenschaft lässt sich die Druckdarstellung für Listbox Objekte festlegen.
In diesem Modus wird die Listbox über die standardmäßigen Druckbefehle oder den Menübefehl Drucken direkt mit dem Formular gedruckt. Die Listbox wird gedruckt, so wie sie im Formular ist. In diesem Modus lässt sich das Drucken des Objekts nicht präzise steuern, so können Sie bei einer Listbox nicht alle Zeilen drucken, wenn sie mehr enthält als angezeigt werden können.
Dieser Modus führt das Drucken von Listboxen über den Befehl Print object per Programmierung aus. Hier lassen sich nur Listboxen in Projektformularen ausdrucken. Über den Befehl LISTBOX GET PRINT INFORMATION lässt sich der Druck des Objekts steuern.
Dieser Modus führt folgendes aus:
Sie können die Ergebnisse einer SQL-Anfrage direkt in ein Array vom Typ Listbox setzen. So können Sie sich rasch die Ergebnisse von SQL Anfragen ansehen. Es sind nur Suchläufe vom Typ SELECT möglich (siehe Handbuch 4D SQL Reference). Dieser Mechanismus lässt sich nicht mit einer externen SQL Datenbank verwenden.
Dabei gilt folgendes:
Beispiel
Wir wollen nach allen Datenfeldern der Tabelle [PEOPLE] suchen und den Inhalt mit der Variablen vlistbox in die Listbox setzen. Für die Objektmethode einer Schaltfläche (als eine Möglichkeit) schreiben Sie:
Begin SQL
SELECT * FROM PEOPLE INTO <<vlistbox>>
End SQL
Produkt: 4D
Thema: Listbox
Hierarchische Listboxen verwalten