Neu vorgestellt, Programmierung

Das Suchen in Bäumen

In der CONZEPT 16-Version 5.7.04 haben wir den Bäumen des Designers eine Suchfunktion spendiert. Nun werden wir diese auch dem CONZEPT 16-Entwickler zur Verfügung stellen, sodass die Suchfunktion in der eigenen Applikation, also zur Laufzeit, genutzt werden kann. Wie Sie die Suche verwenden können, wird in diesem Artikel beschrieben.


Komplexe Baumstrukturen können schnell unübersichtlich werden. Beispielsweise ein Baum, der eine Verzeichnisstruktur abbildet. Er besitzt mehrere Ordner, Unterordner und Dateien. Wird nun eine spezielle Datei gesucht, kann das unter Umständen in einem sehr langem „Durchgeklicke“ enden. Daher wurde das TreeView-Objekt um eine Suchmöglichkeit erweitert.

Suche verwenden
Suche im TreeView

Nichts leichter als das! Zum Verwenden der Suche muss lediglich die neue Eigenschaft wpSearchEnabled des TreeView-Objekts auf true gesetzt werden. Gesucht wird über den Anzeigetext der enthaltenden Knoten. Dafür werden standardmäßig folgende Tasten verwendet:

  • Ctrl + F – Startet die Suche
  • F3 – Findet den nächsten Treffer
  • Shift + F3 – Findet den vorherigen Treffer

Die Tasten bzw. Tastenkombinationen sind in Eigenschaften definiert und können individuell angepasst werden.

Zusätzlich gibt es die Möglichkeit mit dem neuen Befehl WinTreeNodeSearch() auch prozedural nach einem Knoten zu suchen.

Erweiterte Suchmöglichkeiten

Die Suche durchläuft alle Knoten des TreeViews und vergleicht den Suchausdruck mit der Eigenschaft wpCaption, wahlweise auch wpCustom, des Knotens. Auf welche Weise dabei verglichen wird, kann der Entwickler entscheiden. Neben einer WildCard-Suche stehen auch reguläre Ausdrücke und eine begriffsorientierte Suche zur Verfügung.

Außerdem gibt es die Möglichkeit ganz eigene Suchalgorithmen zu implementieren. Dafür wurde das TreeView-Objekt um das Ereignis EvtNodeSearch erweitert. Dieses wird für jeden Knoten, der bei der Suche durchlaufen wird, aufgerufen. Hier könnte beispielsweise ein interner Text, der zu einem Knoten gehört, nach dem Suchbegriff, durchsucht werden. Ist dieser enthalten, kann der entsprechende Knoten als Treffer markiert werden. Die Suche endet, sobald ein Knoten als Treffer gilt, der Baum einmal komplett durchlaufen wurde oder der Benutzer die Suche abbricht.

sub EvtNodeSearch
(
  aEvt                  : event;            // Ereignis
  aNode                 : handle;           // Knoten
  aPattern              : alpha;            // Suchbegriff
  aFlags                : int;              // Suchoptionen
  aAction               : int;              // [in, out] Aktion
)
: logic;                                    // Suche fortsetzen?
{
  // Anfangszeitpunkt der Suche merken
  if (gSearchStart = 0)
    gSearchStart # SysTics();

  // Wenn interner Text zu dem Knoten Suchausdruck beinhaltet
  // Knoten als Treffer markieren
  if (aNode->Node.TextContains(aPattern))
    aAction # _WinTreeNodeSearchFound;

  if (aAction & _WinTreeNodeSearchFound != 0)
    gSearchStart # 0;

  // Suche nach 30 Sekunden abbrechen
  if (SysTics() - gSearchStart > 30000)
  {
    gSearchStart # 0;
    return (false);
  }

  return (true);
}
1 Kommentar

1 Kommentar zu “Das Suchen in Bäumen”

Kommentar abgeben