Neu vorgestellt, Programmierung

Dynamische Listen und Spalten

Mit der anstehenden CONZEPT 16-Version 5.7.05 haben Sie die Möglichkeit Listen- und Spaltenobjekte dynamisch – das heißt zur Laufzeit – zu erzeugen.

Damit können Sie variable Listenobjekte je nach Bedarf per Prozedur zusammensetzen und müssen nicht mehr mit versteckten Spalten vorbereiten.

Wie das funktioniert und was dabei zu beachten ist, lesen Sie in diesem Artikel.

Das dynamische Erstellen der Oberflächenobjekte erfolgt mit der Funktion WinCreate(), die bereits seit der Version 5.7.01 Teil des Funktionsumfangs ist, ebenso wie die Funktion WinAdd(), die zum Hinzufügen eines Objektes zu einem anderen aufgerufen wird.

Die Listenobjekte – die dynamisch erstellt werden können – sind

  • DataList (_WinTypeDataList),
  • DataListPopup (_WinTypeDataListPopup),
  • RecList (_WinTypeRecList),
  • RecListPopup (_WinTypeRecListPopup),
  • StoList (_WinTypeStoList),
  • StoListPopup (_WinTypeStoListPopup) und
  • RecView (_WinTypeRecView)

sowie die Spaltenobjekte

  • Column (_WinTypeListColumn, für Data- und Rec- und StoList-Objekte) und
  • GroupColumn (_WinTypeGroupColumn, für RecView-Objekte).
Beispiel
// DataList-Objekt mit Namen "dlsMyDataList" erstellen
tWinDataList # WinCreate(_WinTypeDataList, 'dlsMyDataList');
// Position (x: 8, y: 8) und Abmessungen (120 x 80, B x H) setzen:
tWinDataList->wpArea # RectMake(8, 8, 128, 88);
// DataList-Objekt zu Frame-Objekt hinzufügen
aWinFrame->WinAdd(tWinDataList);

Damit haben Sie ein DataList-Objekt erzeugt und einem Frame-Objekt hinzugefügt, allerdings noch ohne Spalten. Diese werden auf die selbe Weise erstellt.

Beispiel
// Spalte mit Namen "clmMyColumn" und Beschriftung "Nr." erzeugen
tWinColumn # WinCreate(_WinTypeListColumn, 'clmMyColumn', 'Nr.');
// Spalte zur Liste hinzufügen
tWinDataList->WinAdd(tWinColumn);

Hierdurch erzeugen Sie ein Column-Objekt – also eine Spalte – und fügen Sie dem DataList-Objekt – der Liste – hinzu. Das Listenobjekt selbst kann auch ein statisches sein, das Sie auf diese Art um zusätzliche Spalten erweitern können. Dynamisch erstellte Column-Objekte haben unter anderem die Ausprägungen

  • wpVisible = true,
  • wpClmType = _TypeAlpha,
  • wpDbFieldName = '',
  • wpClmWidth = 70 und
  • wpClmOrder = _MaxInt.

Die Eigenschaften können Sie nach der Erstellung beliebig anpassen. Die Eigenschaft wpClmType spielt nur bei DataList- und DataListPopup-Objekten eine Rolle, die Eigenschaft wpDbFieldName wiederum nur bei RecList- und RecListPopup-Objekten.

Hinweis: Die Eigenschaft wpClmType kann ab dieser Version auch bei statischen Spalten verändert werden, solange das DataList-Objekt keine Zeilen enthält.

Über die Eigenschaft wpClmOrder wird die Anzeigeposition der Spalte bestimmt. Spalten mit kleinem Wert werden links eingeordnet, Spalten mit großem Wert rechts. Beim Maximalwert (_MaxInt) werden sie also immer ganz rechts eingeordnet. Nach dem Einordnen wird der Wert der Eigenschaft auf die tatsächliche Anzeigeposition gesetzt.

Beispiel
// Spalte an dritter Position anzeigen
tWinColumn->wpClmOrder # 3;
// Spalte zur Liste hinzufügen
tWinDataList->WinAdd(tWinColumn);

Die Indexposition der Spalte – die zum Beispiel bei der Funktion WinLstCellSet() angegeben werden muss – ergibt sich aus der Einfügereihenfolge die mit der Funktion WinAdd() beeinflusst werden kann. Hierbei kann nämlich eine Nachfolgespalte angegeben werden, vor die die einzufügende Spalte eingereiht wird. Wird keine Nachfolgespalte übergeben, wird die Spalte hinter die letzte bereits vorhandene Spalte eingefügt.

Das Hinzufügen und Entfernen einer Spalte vor der letzten Position ist nur möglich, solange die Liste leer ist – ein DataList-Objekt also keine Zeilen enthält beziehungsweise einem RecList-Objekt keine Tabelle oder kein Schlüssel zugewiesen ist. An letzter Position kann zu jeder Zeit eine Spalte hinzugefügt und entfernt werden.

Beispiel
// Erste Spalte ermitteln
tWinColumnRef # tWinDataList->WinInfo(_WinFirst);
// Dritte Spalte ermitteln
tWinColumnRef # tWinColumnRef->WinInfo(_WinNext, 2);
// Spalte an dritter Position einfügen (Index = 3)
tWinDataList->WinAdd(tWinColumn, 0, tWinColumnRef);
...
// Zeile hinzufügen
tLine # tWinDataList->WinLstDatLineAdd(...);
// Dritte Zelle setzen
tWinDataList->WinLstCellSet(..., 3, tLine);

Mit der dynamischen Erstellung bieten sich Ihnen viele neue, flexible und ressourcenschonende Möglichkeiten, Listen an individuelle Gegebenheiten anzupassen.

Wir sind gespannt auf Ihre Umsetzungen =).

3 Kommentare

3 Kommentare “Dynamische Listen und Spalten”

Kommentar abgeben