![]() |
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 04:10 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