Deutsch
Quelltexte/ Codesnippets

Eines Füllen Laufwerkes Treeview Verzeichnisbaum

 

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  
 




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



Übrigens - controls.prf solltest Du zum obigen Beispiel schon mitliefern - oder die DownloadURL angeben.
 
25.04.2007  
 




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




Thomas
Freier
Hätte ich mir gerne angesehen.
Aber leider brechen alle Beispiele mit Fehler ab.
Listview.zip vom März 2007

96 kB
Hochgeladen:25.04.2007
Ladeanzahl126
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
25.04.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?
 
25.04.2007  
 




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

679 kB
Hochgeladen:26.04.2007
Ladeanzahl106
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
26.04.2007  
 




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



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

256 kB
Kurzbeschreibung: Demo - Adressor-2
Hochgeladen:26.04.2007
Ladeanzahl122
Herunterladen
 
26.04.2007  
 




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
 
26.04.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.359 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