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
undwpClmOrder = _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 Antworten
Super!
Besonders gefällt mir, das man künftig auch den clmType ändern kann. Damit kann flexible Datalists künfig dann auch korrekt nach z.B. Datum sortieren. (statt nur nach Alpha)
Kompliment, das hört sich sehr vielversprechend an. Wir sind gespannt auf die Freigabe der 5.07.05.