AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ordner schnell einlesen

Ein Thema von silentAMD · begonnen am 5. Mär 2004 · letzter Beitrag vom 22. Mär 2004
Antwort Antwort
Seite 2 von 2     12   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Ordner schnell einlesen

  Alt 21. Mär 2004, 14:33
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 von silentAMD:
und wie man das ganze im child einliest.
das hab' ich jetzt nicht verstanden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
silentAMD

Registriert seit: 27. Sep 2003
203 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Ordner schnell einlesen

  Alt 21. Mär 2004, 14:39
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Ordner schnell einlesen

  Alt 21. Mär 2004, 15:48
Moin SilentAMD,

Zitat von silentAMD:
wie man das ganze in der selektierten treenode einliest (und wie weit).
Weisst Du jetzt nicht, wie man einen Treeview aufbaut, oder wo liegt das Problem?
Was meinst Du mit "wie weit"?

Zitat von silentAMD:
ich hätte das plus nur dann gern angezeigt, wenn tatsächlich ein unterordner vorhanden ist
Dann musst Du halt, mit Hilfe von FindFirst usw., die nächste Verzeichnisebene durchgehen, und prüfen, ob noch mindestens ein Verzeichnis vorhanden ist. In Abhängigkeit vom Ergebnis dieser Prüfung, setzt Du dann die Eigenschaft HasChildren.
Das kann aber Deiner Hauptforderung nach Geschwindigkeit zuwiderlaufen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
silentAMD

Registriert seit: 27. Sep 2003
203 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Ordner schnell einlesen

  Alt 21. Mär 2004, 19:45
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.
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!!
  Mit Zitat antworten Zitat
silentAMD

Registriert seit: 27. Sep 2003
203 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Ordner schnell einlesen

  Alt 22. Mär 2004, 14:00
keine vorschläge??

schade...


wenn das der beste code ist, benutz ich ihn einfach.
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#16

Re: Ordner schnell einlesen

  Alt 22. Mär 2004, 14:06
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...
Alexander
  Mit Zitat antworten Zitat
silentAMD

Registriert seit: 27. Sep 2003
203 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Ordner schnell einlesen

  Alt 22. Mär 2004, 14:16
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.

aber sonst: ist der source ok????
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz