Treeview

Gelöstes und einfache Beispiele
Antworten
Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Treeview

Beitrag von Herbert »

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.

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
Dateianhänge
treedateien.PNG
treedateien.PNG (6.31 KiB) 10095 mal betrachtet

Antworten