Italia
Fonte/ Codesnippets

Eines Füllen Laufwerkes Treeview Verzeichnisbaum

 
- Page 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
Downloadcounter180
Download
 
Nico Madysa
25.04.2007  
 



 
- Page 2 -



GDL
Bei mir funzt es auch.

289 kB
Hochgeladen:26.04.2007
Downloadcounter178
Download
 
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
Downloadcounter184
Download
 
26.04.2007  
 




Nico
Madysa
OK, erstmal danke per 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 potuto rang% nicht immer den gewünschten Zweck erfüllen. Besser bei solchen Rekursionsgeschichten potuto folgendes sein:
KompilierenMarkierenSeparieren
27.04.2007  
 



 
- Page 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-Aiuto unter CreateImageList(F,B) nach - da steht alles weitere
 
27.04.2007  
 




Frank
Abbing
Nico wills doch ohne Dll machen...

Geht circa die API SHGetFileInfo(), Nico. Da bekommst du einen Pointer auf eine Kopie der SystemImageList. Ein Pointer auf das Original geht auch, aber nur circa 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


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

20.362 Views

Untitledvor 0 min.
Member 862464125.04.2024
Uwe Lang02.07.2023
H.Brill30.01.2021
RudiB.02.03.2020
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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