www.ewlab.de
Delphi 2006
Delphi 2005
Kylix
Delphi 6
Delphi 5
Delphi 4
Impressum

Kylix-Untermenü

TFileTable u. a.

Diese Seite beschreibt eine Erweiterung der Komponenten TDirectoryTreeView und TFileTable aus der ersten Auflage des Kylix-Buchs (Seite 966ff), mit der die Sie eine sortierte Darstellung von Verzeichnisbäumen und Dateilisten erhalten. Zwar besitzt die TTreeView-Komponente von Kylix ein Sorted-Property, welches dank der Vererbung auch in TDirectoryTreeView vorhanden ist, doch besteht die voreingestellte Sortierung darin, dass zuerst alle mit Großbuchstaben und dann alle mit Kleinbuchstaben beginnenden Verzeichnisse aufgelistet werden. Dies entspricht der Sortierung der Verzeichnisse im Dateimanager von KDE 2.1:

KDEsortiert

Sortierung für TDirectoryTreeView

Wenn Sie das Sorted-Property bei der Einstellung False belassen und die Methode TDirectoryTreeView.MakeChildNodes wie im unten gezeigten Listing ändern, erhalten Sie stattdessen eine echte alphabetische Sortierung wie folgt:

NEUsortiert

Das folgende Listing zeigt die neue Version der Methode MakeChildNodes (Datei Complib/FileSystemBrowsers.pas):

procedure TDirectoryTreeView.MakeChildNodes(N: TTreeNode);
var
  sr: TSearchRec;
  Path: String;
  DN: TDirectoryNode;
  DirList: TStringList;
  i: Integer;
begin
  DN := N as TDirectoryNode;
  // Zur Entwurfszeit wird nur die erste Ebene angezeigt
  // (sonst würde der gesamte Verzeichnisbaum durchlaufen werden).
  if (csDesigning in ComponentState) then begin
   if DN.Level >= 1 then begin
     DN.HasChildren := False;
     exit;
   end;
  end;
  if DN.Expanded = False then begin
   DN.Expanded := True;
   Path := IncludeTrailingPathDelimiter(DN.Path);
   DirList := TStringList.Create;
   try
     DirList.Sorted := True;
     if FindFirst(Path+'*', faAnyFile, sr) = 0 then begin
       repeat
         if (sr.Attr and faDirectory) <> 0 then
           if (sr.Name <> '.') and (sr.Name <> '..') then
             DirList.Add(sr.Name);
       until FindNext(sr) <> 0;
       FindClose(sr);
       for i := 0 to DirList.count - 1 do
         CreateDirNode(Path+DirList[i], DirList[i], DN);
     end else DN.HasChildren := False;
   finally
     DirList.Free;
   end;
  end;
end;

Zum Download.

Sortierung für TFileTable

TFileTable ist eine spezialisierte TListView-Komponente, sie erbt die Sortierfähigkeiten von TListView, falls Sorted=True können Sie also zur Laufzeit auf Spaltenüberschriften klicken, um die Einträge nach dieser Spalte zu sortieren. In der ersten Kylix-Version ist TListView jedoch dahingehend eingeschränkt, dass sie die von Qt bereitgestellten Eingriffsmöglichkeiten nicht an den Kylix-Benutzer weitergibt. So ist es z.B. nicht möglich, vernünftig nach Zahlen zu sortieren (die Zahlen werden alphabetisch und nicht nach ihrer Größe sortiert, z.B. in der Reihenfolge 1, 144, 16, 350, 7).

Das kleine Update für die TFileTable-Komponente bezieht sich lediglich auf die Sortierung der Dateinamen. Über eine versteckte Spalte, in der alle Dateinamen in Großbuchstaben gespeichert werden, wird erreicht, dass die Komponente (bzw. das darunter liegende Qt-Widget) die Namen so sortiert wie oben am Beispiel von TDirectoryListbox erläutert wurde (wenn Sie die Sortierung, getrennt nach Groß- und Kleinbuchstaben vorziehen, bringt Ihnen das Update der Komponente keinen Vorteil).

Download

Das Update von TFileTable ist, zusammen mit dem oben gezeigten TDirectoryListbox-Update, in der Datei FileSystemBrowsers.pas herunterladbar. Wenn das Update schon zur Entwurfszeit wirksam werden soll, müssen Sie nach dem Kopieren der Datei in das Buch-Verzeichnis/complib das Komponenten-Package neu übersetzen.

Wenn Sie das Kylix-Buch nicht besitzen, können Sie außerdem die Datei EWBuchGlobalDefs.pas herunterladen, die von FileSystemBrowsers vorausgesetzt wird. Sie können die in FileSystemBrowsers enthaltenen Komponenten auch unabhängig vom auf der Buch-CD enthaltenen Komponenten-Package installieren (Kylix-IDE: Komponente | Komponente installieren...).

Diese Seite wurde am 03/12/13 10:25 erzeugt.

[Delphi 2006] [Delphi 2005] [Kylix] [Delphi 6] [Delphi 5] [Delphi 4] [Impressum]