Autor Beitrag
Nowo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 108



BeitragVerfasst: Do 10.04.08 23:12 
Hey
ich will eine ordner liste (hab hier einen ordner in dem sich ca 500 andere befinden)
in eine Listbox ausgeben. Nicht weiter schwer hiermit:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var
   Dir: PChar;
begin
   Dir := 'C:\Folders\*';
   SendMessage(ListBox1.Handle,
               LB_DIR,
               DDL_DIRECTORY +
               DDL_EXCLUSIVE +
               DDL_HIDDEN +
               DDL_READONLY +
               DDL_READWRITE +
               Integer(Dir));


So nun habe ich ALLE ordner in der liste.
Wenn ich nun einfach alles heraus nehme (um genauer zu sein DIRECTORY) dann listet er mir garnichts mehr.
Ist verständlich... aber wie liste ich dann ausschließlich versteckte order ? Möglich ist meines erachtens nur ALLE anzeigen zu lassen.
Also versteckte und nicht versteckte order zusammen. Ich muss die beiden gruppen aber seperatieren.



Kann mir jemand helfen ?

_________________
Grüße Nowo
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Do 10.04.08 23:49 
nur so ein Verdacht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
var
   Dir: PChar;
begin
   Dir := 'C:\Folders\*';
   SendMessage(ListBox1.Handle,
               LB_DIR,
               DDL_DIRECTORY +
               DDL_HIDDEN +
               Integer(Dir));


falls falsch, dann ist es halt falsch.
Ich geh penn.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 10.04.08 23:51 
Erstens habe ich noch nie gesehen, dass man Optionen mit + verknüpft, ist das hier richtig? Normalerweise verodert man sowas mit or.
Zweitens fehlt da ein Parameter, SendMessage bekommt als erstes das Zielfenster (hier ListBox1.Handle), als zweites die Botschaft (hier ja wohl LB_DIR), und dann die beiden Parameter. Der erste sind dann vermutlich deine Konstanten und der zweite das Verzeichnis, du addierst aber alles und das kann nicht gehen.
Drittens: So müsste es richtig aussehen glaube ich...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
    SendMessage(ListBox1.Handle,
               LB_DIR,
               DDL_DIRECTORY or
               DDL_EXCLUSIVE or
               DDL_HIDDEN or
               DDL_READONLY or
               DDL_READWRITE,
               Integer(Dir));

Viertens: Warum listest du die Ordner nicht selbst auf, dann kannst du doch selbst schauen wleche du nimmst und welche nicht. Zum Beispiel so:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
function GetAllDirs(Suchverzeichnis: String; var Ergebnisliste: TStringList;
  IncludeSubDirs: Boolean): Boolean;
var
  Search: TSearchRec;
  //Suchinformationen der aktuellen Suche
  Verzeichnis: String;
  //Teile der Suchmaske einzeln
begin
  Result := False;
  //Zunächst False als Rückgabewert, damit dann nur auf True geändert
  //werden muss, wenn etwas gefunden wird
  Verzeichnis := IncludeTrailingPathDelimiter(Suchverzeichnis);
  if FindFirst(Verzeichnis + '*.*',fadirectory, Search)= 0 then begin
  //Wenn überhaupt ein Verzeichnis gefunden werden kann
    repeat
      if((search.attr and fadirectory) = fadirectory)
        and(search.name[1] <> '.') then begin
      //Wenn ein (Unter-) Verzeichnis vorliegt, in diesem nachschauen
        if IncludeSubDirs then
          GetAllDirs(Verzeichnis + Search.Name, Ergebnisliste, True);
        Ergebnisliste.Add(Verzeichnis + Search.Name);
        Result := True;
        //Wenn Dateien im rekursiven Aufruf gefunden wurden,
        //Rückgabewert auf True setzen
      end;
      Application.ProcessMessages;
      //Rechenzeit freigeben
    until FindNext(Search) <> 0;
    //Bis ein Fehlercode zurückgegeben wird, also keine passende
    //Verzeichnis mehr vohanden ist
  end;
  SysUtils.FindClose(search);
end;
Mit search.attr kannst du ja auch weitere Attribute abfragen, wie siehst du am Attribut faDirectory.