![]() |
Ordner schnell einlesen
hi,
wie kann man ordner schneller einlesen? momentan benutze ich dazu eine suchroutine, die bei ordner-fund ihn einfach in den treeview einliest, aber das dauert... PLEASE HELP! |
Re: Ordner schnell einlesen
Das suchen dauert wohl nicht, aber das Darstellen im Treeview. Es ist bekannt, dass die Borland Implementation nicht die schnellste ist.
|
Re: Ordner schnell einlesen
BeginUpdate/EndUpdate sorgen für einen kleinen Geschwindigkeitszuwachs.
|
Re: Ordner schnell einlesen
Liste der Anhänge anzeigen (Anzahl: 1)
im Anhang ist ne kleine Komponente die Ordner rekursiv einliest
|
Re: Ordner schnell einlesen
THX :-D ,
aber bei vielen programmen findet man ja auch son shelltreeview, kann man aus einem "normalen" Treeview kein shelltreeview machen (mit möglichst wenig code)? |
Re: Ordner schnell einlesen
Das ShellTreeView müsste bei delphi schon dabei sein unter SAMPLES außer du hast es bei der Installation von Delphi nicht mit ausgewählt (abgewählt). Der Source dazu müsste dann mit im Demoverzeichnis sein. Bei Delphi7 Enterprise und Delphi6 Personal in "Demos\ShellControls" und da die Unit "ShellCtrls.pas".
|
Re: Ordner schnell einlesen
@SirThornberry: ja gut, aber ich brauche eine ohne kontextmenü, ohne icons, und ohne sonstige funktionen.
ich hab mir vorgestellt, dass ich in einem onclick bzw. onchange ereignis einer treeview ein bischen code einbauen kann, das aus der "normalen" treeview eine kleine shelltreeview macht, die sich schnell einlesen lässt. - OHNE ICONS - OHNE KONTEXTMENÜ - OHNE SONSTIGE FUNKTIONEN - MIT MÖGLICHST WENIG CODE - SCHNELL!!! PLEASEE HELP!!! |
Re: Ordner schnell einlesen
Der source ist doch dabei, änder den doch einfach ab
|
Re: Ordner schnell einlesen
Moin SilentAMD,
wenn Dir Geschwindigkeit das Wichtigste ist, dann mach' es doch wie Windows: Beim ersten Start wird nur die oberste Ebene angezeigt (z.B. die Laufwerke), und dann auf Doppelklick jeweils die Verzeichnisse der nächsten Ebene. |
Re: Ordner schnell einlesen
leider weiss ich garnicht, was ich da rauskopieren soll :( :gruebel: :pale: :oops:
@Christian Seehase: so hab ich mir das ja vorgestellt, nur hab ich keine ahnung, wie ich bei einer treeview das plus anzeigen kann, wenn ein unterordner vorhanden ist und wie man das ganze im child einliest. |
Re: Ordner schnell einlesen
Moin SilentAMD,
für das [+] musst Du nur die Eigenschaft HasChildren des jeweiligen Nodes auf true setzen. Es spielt keine Rolle ob das tatsächlich der Fall ist, dass kannst Du dann, wie auch der Explorer das macht, von Fall zu Fall überprüfen, und ggf. korrigieren. Zitat:
|
Re: Ordner schnell einlesen
na wie man das ganze in der selektierten treenode einliest (und wie weit).
ich hätte das plus nur dann gern angezeigt, wenn tatsächlich ein unterordner vorhanden ist |
Re: Ordner schnell einlesen
Moin SilentAMD,
Zitat:
Was meinst Du mit "wie weit"? Zitat:
Das kann aber Deiner Hauptforderung nach Geschwindigkeit zuwiderlaufen. |
Re: Ordner schnell einlesen
Hi,
nach langem programmieren: hier der code:
Delphi-Quellcode:
procedure TFenster.GetDirs(const ADirectory: String; var Tree: TTreeView; Start: TTreeNode);
function ReadSubs(s: String): Boolean; var srec: TSearchRec; found: Integer; begin RESULT := FALSE; found := FindFirst(Slash(s)+'*.*', faDirectory, srec); try while not(RESULT) and (found=0) do begin if ((srec.Attr and faDirectory) <> 0) and ((srec.Name <> '.') and (srec.Name <> '..')) then RESULT := TRUE; found := FindNext(srec); end; finally FindClose(srec); end; end; var rec: TSearchRec; begin if FindFirst(Slash(ADirectory)+'*.*', faDirectory, rec) = 0 then begin try repeat if ((rec.Attr and faDirectory) <> 0) and ((rec.Name <> '.') and (rec.Name <> '..')) then begin with Tree.Items.AddChild(Start, rec.Name) do if ReadSubs(Slash(ADirectory)+rec.Name) then HasChildren := True; end; until FindNext(rec) <> 0; finally FindClose(rec); end; end; end;
Delphi-Quellcode:
function TFenster.Slash(s: String): String;
begin RESULT := s+'\' end;
Delphi-Quellcode:
procedure TFenster.lDirExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean); var i: Integer; begin for i := 0 to Node.Count-1 do Node.getFirstChild.Delete; GetDirs(Slash(Paren(Node, lDir)), lDir, Node); Node.AlphaSort(FALSE) end;
Delphi-Quellcode:
procedure TFenster.FormCreate(Sender: TObject);
begin lDir.Items.BeginUpdate; GetDirs('C:', lDir, lDir.Items.AddChild(nil, 'C:')); lDir.Items.EndUpdate; lDir.AlphaSort(TRUE); lDir.Items.Item[0].Expand(FALSE); end; bitte helft mir, den code zu vereinfachen oder verbessern. :coder: z.b. für ein leichteres einlesen bei schon vorhandenen einträgen (beim expandieren werden zuerst alle gelöscht, dann neu eingelesen) oder für leichteres erkennen, ob ein unterordner vorhanden ist. PLEASE HELP!! |
Re: Ordner schnell einlesen
keine vorschläge?? :?: :?: :gruebel: :cyclops:
schade... :cry: wenn das der beste code ist, benutz ich ihn einfach. |
Re: Ordner schnell einlesen
Rück das erstmal vernünftig ein ;-)
Ich habe mir das jetzt auch nciht vernünftig angekuckt, aber du hast keine BeginUpdate/EndUpdate Blöcke benutzt. Die bringen auhc einen Geschwindigkeitsvorteil, da wie Luckie schon gesagt, dauert das ausgeben am längsten... ;-) |
Re: Ordner schnell einlesen
ich wollts eben einrücken, klappt aber nur an einigen stellen. :(
das mit begin und endupdate ergibt in der listview ein störendes blinken (wenns erst aus- dann wieder eingeblendet wird), das will ich vermeiden. :mrgreen: aber sonst: ist der source ok???? :warn: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz