Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ordner im Windows Verzeichnis suchen (https://www.delphipraxis.net/500-ordner-im-windows-verzeichnis-suchen.html)

Tpercon 1. Aug 2002 11:04


Ordner im Windows Verzeichnis suchen
 
Hi

Ich möchte in einem TreeView den Pfad (z.B.: C:\Windows\Anwendungsdaten\Adobe\) anzeigen, den ich zuvor gespeichert habe. Dazu habe ich folgenden Code geschrieben:
Code:
z:=0;
While AnsiPos('\',pfad)<>0 do
 begin
  i:=AnsiPos('\',pfad);
  s:=copy(pfad,1,i-1);
  For i:=z to TreeView1.Items.Count-1 do
   If TreeView1.Items.Item[i].Text=s
    then
     begin
      TreeView1.Items.Item[i].Expand(False);
      z:=i+1;
      Break;
     end;
  pfad:=copy(pfad,Length(s)+2,Length(pfad)-Length(s)-1);
 end;
Warum funktioniert das bei manchen Ordnern im Windows Verzeichnis nicht, der Ordner ist definitiv da?

Gruß

sakura 1. Aug 2002 11:53

Ich weiss zwar nicht, wie Du die Verzeichnisse ausgelesen hast, aber kann es sein, dass es durch System- und versteckte Dateien/Verzeichnisse diese Probleme gibt?

Tpercon 1. Aug 2002 13:47

Aber das TreeView enthält exakt die gleichen Ordner, wie vorher. Ich find da einfach keine Lösung.

Christian Seehase 1. Aug 2002 14:46

Moin Tpercon,

wie liest Du denn die Ornderstruktur aus?

Tpercon 1. Aug 2002 15:12

Ich lese ganz normal mit FindFirst,FindNext,... nur die Ordner ein. Daran kann es aber auch nicht liegen.

Der Index wird doch von oben nach unten durch gezählt oder? Damit müßte es doch stimmen, dass ein Unterordner einen höheren Index hat, als der darüber und mein Code somit richtig sein?!

sakura 1. Aug 2002 16:02

Poste mal die Zeile(n) mit dem FindFirst!

Tpercon 1. Aug 2002 17:20

Hi

Hier die paar Zeilen, die in Frage kommen.

Hiermit lese ich die obersten Ordner nach den Laufwerken ein:
Code:
procedure TForm1.showdir(Node:TTreeNode;s:string);
var
  datei: TSearchRec;
begin
  If FindFirst(s, faDirectory, datei) = 0
    then
    begin
      try
        repeat
          If (datei.Name = '.') or (datei.Name = '..') or (datei.Attr and fadirectory = 0)
          then Continue;
          TreeView1.Items.AddChild(Node, datei.Name);
        until Findnext(datei) <> 0;
      finally
      FindClose(datei);
    end;
  end;
end;
Dann der Code vom TreeViewExpanding:
Code:
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TreeNode; var AllowExpansion: Boolean);
begin
  dir(Node, true);
  Node.AlphaSort;
end;
Die Funktion dir liest dabei nur weitere Ordner ein Level tiefer aus. Im Prinzip wie ShowDir.
Code:
procedure TForm1.dir(Node:TTreeNode; Ordner:boolean);
var
  s, pfad: string;
  i: integer;
  N: TTreeNode;
  datei: TSearchRec;
  ...
begin
  if ordner then
  begin
    TreeView1.Items.BeginUpdate;
    Node.DeleteChildren;
  end
  else
  begin
    ...
  end;
  N := Node;
  s := '';
  while N <> nil do
    begin
      s := N.Text + #92 + s;
      N := N.Parent;
    end;
  pfad:=s;
  s := pfad + '*.*';
  if FindFirst(s,faDirectory,datei) = 0 then
  begin
    try
      repeat
        if (datei.Name='.')or(datei.Name='..') then
          Continue;
        if (datei.Attr and fadirectory > 0) and (ordner = true) then
        begin
          N := TreeView1.Items.AddChild(Node, datei.Name);
          showdir(N, pfad + datei.Name + '\*.*');
        end;
      if (datei.Attr and fadirectory = 0) and (ordner = false) then
        begin
          ...
        end;
      until Findnext(datei)<>0;
    finally
    FindClose(datei);
    end;
  end;
  if ordner then
    TreeView1.Items.EndUpdate
  else
  begin
    ...
  end;
end;
by Daniel B; Code-Form.

Tpercon 2. Aug 2002 18:36

Hi

Hat keiner ne Idee?

@ Daniel B: Hast wohl Langeweile, meine Formatierung find ich auch schön.

Gruß

Daniel B 2. Aug 2002 20:11

OT:
 
Zitat:

Zitat von Tpercon
@ Daniel B: Hast wohl Langeweile, meine Formatierung find ich auch schön.

Hi,

mit langeweile hat das nichts zutun.
Bisher war es immer so das man immer 2Spalten einrückt. Es soll nur einigermassen einheitlich aussehen.
Ich will jetzt kein Mod angreifen, aber die anderen kümmern sich nciht besonders drum, Postings zu Formatieren. Deswegen habe ich da noch, wie soll ich sagen, freies Spiel. Keiner hat bis jetzt drüber gemeckert. Wenn andere nicht Fomatieren, an wenn soll ich mich denn richten? Deswegen mache ich es nach meinem Befinden. Das ich eigentlich nciht schlecht finde. Das kann man aber natürlich die User entscheiden lassen. Ob 1 oder 2 Spalten einrücken.

Ich mach mal ein Thread auf. Du kannst ja abstimmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 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