TreeView + DataList = TreeList

Das TreeView– und das DataList-Objekt sind zwei der meistverwendenten Oberflächenobjekte in CONZEPT 16 zur Visualisierung von dynamisch erzeugten Daten.

Das TreeView-Objekt wird hauptsächlich zur Darstellung hierarchischer Strukturen eingesetzt. Das DataList-Objekt hingegen wird vorwiegend zur Anzeige gleichrangiger, aber ausführlicherer Informationen genutzt.

In diesem Artikel möchte ich Ihnen ein Modul vorstellen, das ein DataList-Objekt um die Vorzüge eines TreeView-Objektes erweitert.

TreeView

Der Hauptvorteil einer Baumansicht gegenüber einer Listenansicht liegt in der Möglichkeit des Benutzers für ihn irrelevante Informationen ausblenden zu können, indem er einzelne Äste des Baumes zuklappt. Außerdem können dem Benutzer durch die Baumansicht Hierarchien oder Abhängigkeiten von Daten sehr einfach veranschaulicht werden.

TreeView-Objekt

DataList-Objekt

Typischerweise ist der Informationsgehalt eines einzelnen Elements innerhalb eines TreeView-Objektes auf wenige Daten, wie den Namen des Elements, beschränkt. In einem DataList-Objekt hingegen kann die Information eines einzelnen Elementes auf eine beliebige Anzahl von Spalten aufgeteilt werden.

DataList-Objekt

TreeList

Das Modul “MdlTreeList” ergänzt das DataList-Objekt um die Vorteile des TreeView-Objektes: Das Zuklappen einzelner Elemente und die einfache Visualisierung hierarchischer Strukturen.

TreeList-Objekt

Für die Speicherung der Hierarchie und die Darstellung der Symbole werden zusätzliche Spalten innerhalb des DataList-Objektes benötigt. Mit der CONZEPT 16-Version 5.7.05 und den dynamischen Spalten kann das Modul diese Spalten selbstständig anlegen und löschen.

Die Schnittstelle des Moduls orientiert sich an den Funktionen des TreeView- und des DataList-Objektes. Ein Ausschnitt:

LineAdd // Zeile hinzufügen
(
  aVarOrLineParent      : handle;       // Instanz oder Übergeordnete Zeile
  opt aCaption          : alpha(4096);  // Titel
  opt aImage            : int;          // Bild "zugeklappt" (_Win.TreeListImage...)
  opt aImageExp         : int;          // Bild "aufgeklappt" (_Win.TreeListImage...)
  opt aLineNext         : handle;       // Nachfolgende Zeile
)
: handle;                               // Zeile
LineRemove // Zeile entfernen
(
  aLine                 : handle;       // Zeile
  opt aChildrenOnly     : logic;        // Nur untergeordnete Zeilen entfernen
)
LineCaptionSet // Titel setzen
(
  aLine                 : handle;       // Zeile
  aCaption              : alpha(4096);  // Titel
)
LineImageSet // Bild setzen
(
  aLine                 : handle;       // Zeile
  aImage                : int;          // Bild "zugeklappt" (_Win.TreeListImage...)
  opt aImageExp         : int;          // Bild "aufgeklappt" (_Win.TreeListImage...)
)
LineExpand // Zeile aufklappen
(
  aLine                 : handle;       // Zeile
)
LineCollapse // Zeile zuklappen
(
  aLine                 : handle;       // Zeile
)
LineDynamicSet // Setzen, dass untergeordnete Zeilen dynamisch (beim Auf-/Zuklappen) hinzugefügt bzw. entfernt werden
(
  aLine                 : handle;       // Zeile
  aDynamic              : logic;        // Untergeordnete Zeilen werden dynamisch hinzugefügt.
)
CellSetA // Zelle setzen (Typ: alpha)
(
  aLine                 : handle;       // Zeile
  aColumnNo             : int;          // Spaltennummer
  aValue                : alpha(4096);  // Wert
)
// Ereignis EvtFold setzen - Wird vor dem Auf- und Zuklappen einer Zeile ausgelöst.
EventFoldSet
(
  aVar                  : handle;       // Instanz
  aEvt                  : alpha(61);    // Funktion
)
Beispiel
...
@I:MdlWinTreeListInc
...
// TreeList-Objekt initialisieren
tTreeList # MdlWinTreeList:Init(
  $dlDataList,        // DataList-Objekt
  5,                  // Anzahl der Bildspalten im DataList-Objekt
  1,                  // Spaltennummer für Titel
);
// Zeile zu Liste hinzufügen
tTreeLine # tTreeList->MdlWinTreeList:LineAdd('Ordner 1', _Win.TreeListImageFolder);
// Untergeordnete Zeile zu Zeile hinzufügen
tTreeLine # tTreeLine->MdlWinTreeList:LineAdd('Dokument 1', _Win.TreeListImageDocument);
// 2. Zelle setzen
tTreeLine->MdlWinTreeList:CellSetA(2, '1. Jan.');
// 3. Zelle setzen
tTreeLine->MdlWinTreeList:CellSetA(3, '95 KB');
...
// TreeList-Objekt terminieren
tTreeList->MdlWinTreeList:Term();
...

Der am Ende des Artikel befindliche Download beinhaltet neben dem eigentlichen Modul auch ein Beispiel zur Verwendung.

Das Modul überlässt dem Entwickler viele Freiheiten in der optischen Gestaltung und bietet ihm darüber hinaus Spielraum für eigene Anpassungen und Erweiterungen.


Fazit

Die breite Palette an Oberflächenobjekten die CONZEPT 16 bereits Out-of-the-Box mitbringt lässt sich durch eigene Objekte erweitern – wenn auch mit etwas Aufwand, dafür aber auf die eigenen Bedürfnisse zugeschnitten. Auf dem gleichen Prinzip basieren übrigens auch das in früheren Artikel vorgestellte Slider-Objekt und die Suchleiste für RTFEdit-Objekte.

Haben Sie für Ihre Anwendungen auch eigene, allgemein verwendbare Objekte entwickelt, die Sie hier im CONZEPT 16-Blog gerne vorstellen und mit anderen Entwicklern teilen möchten? Wir würden uns sehr darüber freuen =).

Download

Zum downloaden hier klicken MdlWinTreeList.zip (129.13 KB)
Sie müssen angemeldet sein, um die Datei herunterladen zu können.

Klicken Sie hier, um die Nutzungsbedingungen für unseren Blog zu lesen.

3 Antworten

  1. Nicht schlecht. Wie man sieht, erhöht die Möglichkeit, Dialoge dynamisch aufzubauen die Flexibilität erheblich.

    Jetzt scheint auch ein XML-Import von Dialogen in Reichweite zu sein.

    So richtig schön wäre es, wenn all diese Dynamik auch bei den Druckobjekten und -elementen zum Tragen käme. Dort wären sicherlich ebenfalls viele eigene wiederverwendbare Druckobjekte denkbar.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Leave the field below empty!

Wünsche, Fragen oder Feedback sind willkommen:

Nutzungsbedingungen der Kommentarfunktion im Blog

1. Allgemeines

Vectorsoft AG („Anbieter“) stellt für Internetnutzer („Nutzer“) auf der Website
vectorsoft.de einen öffentlichen Blog bereit. Der öffentliche Blog dient dem
Informations- und Gedankenaustausch. Die Nutzer, welche sich mit Beiträgen und
Kommentaren beteiligen, verpflichten sich dazu, die Blog-Nutzungsbedingungen
einzuhalten und tragen die Verantwortung für die Richtigkeit und Angemessenheit
sowie Freiheit von Rechtsverletzungen ihrer Beiträge. Mit Nutzung der
Kommentarfunktion in unserem Blog akzeptieren Sie diese Nutzungsbedingungen.

2. Netiquette

Wir bitten Sie von persönlichen Angriffen und Provokationen aufgrund anderer
Meinungen abzusehen. Bitte argumentieren Sie sachlich und bewegen Sie sich auf
der Basis einer konstruktiven Diskussionskultur. Ihr Kommentar sollte stets im
Zusammenhang mit dem jeweiligen Thema sein, um Ausschweifungen in andere
Themenbereiche zu vermeiden. Das mehrmalige Posten desselben Kommentars
oder mehrerer ähnlicher Kommentare ist nicht erlaubt.

3. Verbot rechtswidriger Inhalte

Mit Absenden Ihres Kommentars bestätigen Sie, dass Sie keine Urheberrechte oder andere Rechte Dritter verletzen. Volksverhetzende, rassistische Äußerungen, Anleitungen zu Straftaten und deren Verherrlichung, Gewaltdarstellungen, pornografische Inhalte und Äußerungen, die Persönlichkeitsrechte verletzen sind untersagt.

4. Keine Werbung

Die Nutzung der Kommentarfunktion ist für kommerzielle oder parteipolitische
Zwecke nicht erlaubt. Werbliche Beiträge aller Art werden von uns umgehend
gelöscht.

5. Angaben zum Namen

Bei der Eingabe Ihres Namens achten Sie auf die zuvor genannten Grundsätze.

6. Quellenangaben

Bitte geben Sie bei der beabsichtigten Veröffentlichung von Zitaten oder Beiträgen
Dritter die jeweiligen Quellen an und erläutern dessen Bezug zum Blogbeitrag.

7. Verstoß gegen die Nutzungsbedingungen

Beiträge, die gegen diese Richtlinie verstoßen werden umgehend gelöscht. Sollten
Sie selbst Verstöße bemerken, so senden Sie uns bitte den Link des betreffenden
Kommentars per E-Mail an . Wir weisen ausdrücklich daraufhin, dass wir einzelne Nutzer bei wiederholten oder schweren Verstößen gegen diese
Nutzungsbedingungen ausschließen werden.

Stand: Sept. 2024

Deine Trial Version - jetzt anfordern!

Teste yeet - unverbindlich und kostenfrei

IHRE EVALUIERUNGSLIZENZ - JETZT ANFORDERN!

TESTEN SIE DIE CONZEPT 16 VOLLVERSION - UNVERBINDLICH und KOSTENFREI

Melden Sie sich bei unserem Newsletter an

Anrede*
     
Zustimmung zur Datenverarbeitung gem. DSGVO*



WordPress Cookie-Hinweis von Real Cookie Banner