Deutsch
Quelltexte/ Codesnippets

Eines Füllen Laufwerkes Treeview Verzeichnisbaum

 
- 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?

14 kB
Kurzbeschreibung: Die benötigte Include
Hochgeladen:25.04.2007
Ladeanzahl180
Herunterladen
 
Nico Madysa
25.04.2007  
 



 
- Seite 2 -



GDL
Bei mir funzt es auch.

289 kB
Hochgeladen:26.04.2007
Ladeanzahl178
Herunterladen
 
Windows7 Xprofan 8,9,10 [...]  [...] 
26.04.2007  
 



Leg einfach Laufwerke an Horst!

Start → Ausführen → %comspec% [enter] subst /? [enter]
 
26.04.2007  
 




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 ?
 
26.04.2007  
 




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

124 kB
Hochgeladen:26.04.2007
Ladeanzahl184
Herunterladen
 
26.04.2007  
 




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.
 
Nico Madysa
27.04.2007  
 



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.
 
27.04.2007  
 



 
- Seite 3 -



Nico
Madysa
Ich habe mit einer globalen Variablen keine Probleme, ist schließlich mein eigener Code.
 
Nico Madysa
27.04.2007  
 



@Nico


@Frank: Wie komme ich an das Handle der System-Imagelist? Ohne dem komm ich eher schlecht an die Liste heran.


Frank ist anscheinend nicht da - geb ich Dir halt Auskunft:
Guck doch mal in der LISTVIEW-Hilfe unter CreateImageList(F,B) nach - da steht alles weitere
 
27.04.2007  
 




Frank
Abbing
Nico wills doch ohne Dll machen...

Geht über die API SHGetFileInfo(), Nico. Da bekommst du einen Pointer auf eine Kopie der SystemImageList. Ein Pointer auf das Original geht auch, aber nur über zwei undokumentierte APIs aus der SHELL32. Das lass bleiben. Die Kopie enthält auch fast alle Icons.
 
27.04.2007  
 




Nico
Madysa
Alles klar, danke. Ich hab jetzt übrigens noch ne neue Idee, die Wahl nicht an den ChooseDir- sondern an den LoadFile-Dialog anzulehnen, sprich, eijn Listview, statt einem Treeview erstellen. Dann dauert auch das Laden nicht so lang.
 
Nico Madysa
02.05.2007  
 




Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

20.247 Betrachtungen

Unbenanntvor 0 min.
Member 862464125.04.2024
Uwe Lang02.07.2023
H.Brill30.01.2021
RudiB.02.03.2020
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie