| |
|
|
Nico Madysa |
$H Windows.ph
$H Messages.ph
$I controls.prf
3 + 4 + 8
proc Add_Dir
parameters pfad$ , rang% , p&
declare i%[14] , nextdir$
if (rang% < 0)
p& = TV_AddItem(tv&,0,2,2,Laufwerk + pfad$ + \,i#[t%])
inc rang%
inc t%
endif
ClearList
ClearList lb&[rang%]
AddFiles pfad$ + \*
whileloop 0 , %GetCount
Match$(^~[.+~]$,ListBoxItem$(&loop))
if %MatchPos >= 0
AddString(lb&[rang%],$Match)
endif
EndWhile
DeleteString(lb&[rang%],SelectString(lb&[rang%],(-1),[.]))
DeleteString(lb&[rang%],SelectString(lb&[rang%],(-1),[..]))
ClearList
MoveHandleToList(lb&[rang%])
clear i%[rang%]
while i%[rang%] < (GetCount(lb&[rang%]))
nextdir$ = GetString$(lb&[rang%],i%[rang%])
nextdir$ = Mid$(nextdir$,2,len(nextdir$) - 2)
TV_AddItem(tv&,p&,0,1,nextdir$,i#[t%])
inc t%
if rang% < 14
Add_Dir (pfad$ + \ + nextdir$) , (rang% + 1) , i#[t% - 1].hItem&
endif
i%[rang%] = i%[rang%] + 1
wend
endproc
proc beenden
FreeDLL shl&
il#.Destroy()
Dispose il#
Dispose i#[]
end
endproc
declare il# , tv& , tx& , shl& , i#[1999] , lb&[14] , t%
Dim i#[] , TV_Item
shl& = UseDll(SHELL32)
cls SysColor(15)
WindowTitle Bitte warten, erstelle Verzeichnisbaum...
whileloop 15
lb&[&loop - 1] = Create(ListBox,%hWnd,1,0,0,0,0)
EndWhile
il# = New(ImageList)
il#.AddImage($SysPath + \Shell32.dll,3)
il#.AddImage($SysPath + \Shell32.dll,4)
il#.AddImage($SysPath + \Shell32.dll,8)
tv& = Create(Treeview,%hWnd,il#.hList&,5,5,200,400)
Add_Dir C: , (-1) , 0 <-- hier den Laufwerksbuchstaben/Anfangspfad eingeben; am Ende darf kein Backslash stehen
TV_Expand tv& , i#[0].hItem&
SetText %hWnd , str$(t%) + Einträge im Treeview
whilenot IsKey(27)
waitinput
wend
Beenden
end
Mit diesem Code wird ein Treeview erzeugt und durch Rekursion (bin ich stolz, dass ich das hinbekommen habe! ) mit allen Verzeichnissen eines Laufwerkes gefüllt. Leider ist das sehr umständlich und dauert ziemlich lange. Daher habe ich zwei Fragen: 1.) Wie viele Einträge enthält das Treeview bei euch maximal? (Steht nach dem Laden in der Titelleiste) Mir geht es darum, zu wissen, ob die Handles reichen. 2.) Gibt es nicht irgendeinen einfacheren Weg? In der Win32.hlp habe ich nichts gefunden und mit Assembler kenne ich mich sonderlich aus. Könnte man das so beschleunigen? |
|
|
| |
|
|
|
Hubert Binnewies | Ich hätte es ja gerne getestet, aber leider habe ich nur XProfan 9.1...sorry...
Hubert |
|
|
| WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 25.04.2007 ▲ |
|
|
|
|
Jörg Sellmeyer | Du solltest nicht alle Daten sofort einlesen, sondern erst bei Bedarf. Also immer nur die Dateien auslesen, die gerade im aktuellen Ordner sind. Sonst mußt Du auch andauernd alles aktualisieren, wenn sich am Dateibestand was ändert. Leider muß man dann auch so fiese Messages wie Klick auf Plus-/Minuszeichen vor dem Ordner abfangen. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 25.04.2007 ▲ |
|
|
|
|
| Du könntest meine addfiles.dll benutzen! Diese ist weitaus schneller und bietet ebenso Rekursion bis zum Abwinken. Aufgabe des XProfanprogrammes ist dann nur noch ein Loop zum Befüllen des TreeViews. |
|
|
| |
|
|
|
| Übrigens - controls.prf solltest Du zum obigen Beispiel schon mitliefern - oder die DownloadURL angeben. |
|
|
| |
|
|
|
Frank Abbing | Hm,
steigt bei mir nach kurzer Zeit aus mit dem Fehler: Das Element gibt es nicht. (Zeile 46)
Deine Lösung, die Icons aus der Shell32.dll zu laden, ist denkbar ungeeignet, weil die Icons so eine schlechte Qualität aufweisen. Ich würde in jedem Fall die System-Imageliste benutzen, dann erhälst du hochwertige Icons. In meinem Listview.dll-Paket befindet sich meine Treeview.dll, die ebenfalls Verzeichnisse in einem Treeview listet. Sieh mal rein, so sollten die Icons aussehen. Ist auch eine sehr schnelle Lösung, da in Assembler erstellt.
Vielleicht hilft dir die Message WM_SETREDRAW, um deine Geschwindogkeit zu erhöhen. |
|
|
| |
|
|
|
Thomas Freier | Hätte ich mir gerne angesehen. Aber leider brechen alle Beispiele mit Fehler ab. Listview.zip vom März 2007 |
|
|
| |
|
|
|
Frank Abbing | Ach nö... hab die Codes heut Nachmittag doch noch selber getestet. Laufen sauber unter XP... Bestimmt ist dein Programmeditor nicht auf den passenden Pfad eingestellt. Probierste mal feste Pfade oder $progdir? |
|
|
| |
|
|
|
Thomas Freier | Glaube ich dir. Komme aber nicht weiter. Anbei das Original mit $drive und einmal mit $ProgDir...https://xprofan.com/images/smiles/6.gif |
|
|
| |
|
|
|
Frank Abbing | Beide Exe funktionieren einwandfrei bei mir. Wüsste nicht, was ich da für dich tun könnte. Würden das bitte noch weitere User testen? |
|
|
| |
|
|
|
| @Frank Beide DLL - (Listview.DLL und Treeview.DLL) funtionieren einwandfrei. Schliesslich sind wir Dir oft genug auf den Wecker gegangen, weil wieder mal jemand einen Bug fand oder einen Verbesserungsvorschlag hatte
Im Bild sieht man die gleichzeitige Benutzung der beiden DLL - Das Hauptfenster zeigt die Listview.dll mit allen relevanten Daten an. Im Vordergrund ist die Treeview.dll aktiv. |
|
|
| |
|
|
|
Carlo Keil | Ich vermute einen Zusammenhang mit der Verzeichnisstruktur und damit mit der Rekursionstiefe. Auf meinen C:-Laufwerk (Verzeichnisse und Verzeichnisschachtelungen fast ohne Ende) gibt es auch die Fehlermeldung Das Element gibt es nicht.. Auf meinem P:-Laufwerk (enthält nur meine komplettes Profan-Entwicklungssystem) klappt es ohne Fehlermeldung.
Gruß Carlo |
|
|
| |
|
|