| |
|
|
- Seite 1 - |
|
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? |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
| @Carlo
[offtopic] Auf meinem P:-Laufwerk ... Wieviel Laufwerke hast Du ? - 16 und mehr ? - Dann könntest Du für mich mal einen Test durchführen. - Ich komme bei meinen Laufwerken nur bis I: - Müsste aber meine Dateiverwaltung mit mehr wie 12 Laufwerken testen um die Darstellung zu kontrollieren - Einverstanden mit einem Test ? [/offtopic] |
|
|
| |
|
|
|
Thomas Freier | Hallo Frank, auf dem PC (mit SP2) läuft auch bei mir alles einwandfrei. Auf dem Laptop (mit SP1) klappt nur die Treeview nicht. Explorer-Demo mit Listview ist OK. Hatte erst die ext. USB-Platte in Verdacht, änderte sich nicht nach dem Entfernen und Neustart. |
|
|
| |
|
|
|
Carlo Keil | Horst Horn
@Carlo [offtopic] Horst HornAuf meinem P:-Laufwerk ... Wieviel Laufwerke hast Du ? - 16 und mehr ? [/offtopic]
Leider nein, aber ich stamme noch aus DOS-Zeiten Und da gab es den schönen Befehl subst. Damit kann man sich prima Laufwerke machen, weil damit einem Pfad ein Laufwerksbuchstabe zugewiesen wird. Das ist sehr nützlich, wenn man z.B. auf zwei PCs mit unterschiedlichen Verzeichnisstrukturen (privater und dienstlicher PC) mit Profan arbeitet und nicht dauernd Pfad- oder Laufwerksbezeichnungen anpassen will. Dank der Großzügigkeit von Bill (oder hat da jemand geschlafen?) gibt es den Befehl unter XP immer noch
HTH Carlo |
|
|
| |
|
|
|
| [offtopic] Hallo Carlo Schade - Da ich einen NC-Clone geschrieben habe und den auch nutze, hätte mich schon interessiert, wie die Programmschleife ab dem 14 Laufwerk arbeitet. Über jedem der zwei Fenster können in der ersten Reihe 13 Laufwerke erkannt und gezeigt werden (so wie im Bild) Ab dem 14. Laufwerk soll nun eine Etage tiefer wieder vorne begonnen werden. Zusätzlich müssen narürlich die beiden Fenster dann auch kleiner in der Höhe sein. Ich hab das schon mit der Eingabe 6 Laufwerke simuliert und es schien auch zu klappen. Lieber wäre mir aber schon ein realer Test [/offtopic] |
|
|
| |
|
|
|
GDL |
|
|
| |
|
|
|
| Leg einfach Laufwerke an Horst!
Start → Ausführen → %comspec% [enter] subst /? [enter] |
|
|
| |
|
|
|
Jörg Sellmeyer | Hallo Horst, Du kannst das ja selber mit beliebig vielen Laufwerken einrichten. Einfach unter Start -> Ausführen so oft Subst M: C:Windows eingeben bis Du entweder genügend hast oder das Limit von 26 erreicht ist. Natürlich muß der Laufwerksbuchstabe immer ein anderer und ein freies Laufwerk sein. Du kannst auch andere Ordner als virtuelles Laufwerk nehmen aber das muß nicht sein.
Ok, iF war schneller |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 26.04.2007 ▲ |
|
|
|
|
| @ iF + Jörg OK - und wie bekomme ich die Laufwerke wieder weg ? |
|
|
| |
|
|
|
Jörg Sellmeyer | Subst /D M: Nach einem Neustart sind aber sowieso alle wieder weg. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 26.04.2007 ▲ |
|
|
|
|
| Danke Funktioniert Siehe Bild |
|
|
| |
|
|
|
Nico Madysa | OK, erstmal danke für die vielen Antworten. Den Tip mit dem Laden der Ordner wenn es nötig ist, werde ich auf jeden Fall umsetzen (da mir schon so viele Leute dazu geraten haben ) AddFiles.dll und die Message werde ich mir auf jeden Fall auch ansehen.
Der Fehler Das Element gibt es nicht. ist einfach zu erklären: Der Code füllt die Element-Handles des Treeviews in ein Array, das ich vorläufig auf 2000 Handles begrenzt habe, aber das ist ja noch erweiterbar. Der zweite Fehler ist mir nicht erklärbar; durch das Abfangen von rang% sollte die maximale Rekursionstiefe eigentlich nicht überschritten werden. Aber wenn ich die Ordner erst zur Laufzeit lade, hätte sich das Problem sowieso erledigt.
@Frank: Wie komme ich an das Handle der System-Imagelist? Ohne dem komm ich eher schlecht an die Liste heran. |
|
|
| |
|
|
|
| So wie ich das beim Überfliegen gesehen habe könnte rang% nicht immer den gewünschten Zweck erfüllen. Besser bei solchen Rekursionsgeschichten könnte folgendes sein: KompilierenMarkierenSeparieren so kannst Du z.B. sicherstellen das eine Rekursion nicht überschritten wird.
Nachteil: eine Globale.
Selbiges Verhalten ohne Globale lässt sich jedoch auch dank %pcount nachstellen. |
|
|
| |
|
|