Treeview
Verfasst: 31. Juli 2011, 11:04
Etwas schwerfällig ist das Verwalten der Treeview-Controls mit Dateien als Inhalt.
Ich will zu einem Produkt die in einem speziell dazu abgelegten Ordner (mit ev. Unterordnern) die Verzeichnisse und Daten dazu in einer Treeview darstellen.
Dabei will ich nicht den Pfad anzeigen, sondern nur die Dateinamen, denn der Ausgangsordner ist vorgegeben.
Schwerfällig ist dabei weniger das TreeView selber als die Befehle fListFile resp. fListDirectory, die den gefundenen inhalt als Textstring mit CR getrennt zurückgeben.
Will ich dabei zuletzt die Verzeichnisse anzeigen lassen, muss ich diese separiert festhalten und bei der Anzeige der Dateien im Stammverzeichnis auslassen.
Da habe ich den praktischen XBase-Befehl DIRECTORY vermisst.
Aber es gelingt (vielleicht zu kompliziert?), siehe Bild am Ende.
Soll ein Klick auf einen Eintrag die Sache anzeigen, muss der Row Selection-Slot bedient werden:
Ich will zu einem Produkt die in einem speziell dazu abgelegten Ordner (mit ev. Unterordnern) die Verzeichnisse und Daten dazu in einer Treeview darstellen.
Dabei will ich nicht den Pfad anzeigen, sondern nur die Dateinamen, denn der Ausgangsordner ist vorgegeben.
Schwerfällig ist dabei weniger das TreeView selber als die Befehle fListFile resp. fListDirectory, die den gefundenen inhalt als Textstring mit CR getrennt zurückgeben.
Will ich dabei zuletzt die Verzeichnisse anzeigen lassen, muss ich diese separiert festhalten und bei der Anzeige der Dateien im Stammverzeichnis auslassen.
Da habe ich den praktischen XBase-Befehl DIRECTORY vermisst.
Aber es gelingt (vielleicht zu kompliziert?), siehe Bild am Ende.
Code: Alles auswählen
sbuf = NoSpace(EDT_Pfad)
IF sbuf<>""
sbuf = CompleteDir(sbuf)
END
IF sbuf<>"" THEN
TreeAdd(TREE_Prospekt,sbuf)
sDir = fListDirectory(sbuf,frInterruptible)
FOR EACH STRING sDetDir OF sDir SEPARATED BY CR
ArrayAdd(arrdirect,sDetDir)
END
ResFileList = fListFile(sbuf+"*.*", frNotRecursive + frInterruptible)
FOR EACH STRING AFile OF ResFileList SEPARATED BY CR // die einzelnen Einträge ansehen
bGef = False
FOR i=1 _TO_ arrdirect..Occurrence
IF arrdirect[i] = AFile THEN
bGef = True
BREAK
END
END
IF NOT bGef THEN // es ist kein Ordner, sondern eine Datei
IF Position(AFile,sbuf) > 0 THEN
sDetfile = Middle(AFile,Length(sbuf)+1) // vorgelagerte Pfadangabe wegnehmen
ELSE
sDetfile = AFile
END
TreeAdd(TREE_Prospekt,sbuf+TAB+sDetfile)
END
END
TreeExpand(TREE_Prospekt,sbuf)
// hier folgt der Code für die Abarbeitung der Inhalte der Unterveerzeichnisse (in ähnlicher Manier)
...
Soll ein Klick auf einen Eintrag die Sache anzeigen, muss der Row Selection-Slot bedient werden:
Code: Alles auswählen
sbuf is string=""
sbuf = MySelf[MySelf]
IF NoSpace(sbuf)<>"" THEN
ShellExecute(sbuf)
IF ErrorOccurred THEN
// Error(ErrorInfo())
sbuf = Replace(sbuf,TAB,"")
ShellExecute(sbuf)
END
END