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...
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:
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; Verzeichnis: String; begin Result := False; Verzeichnis := IncludeTrailingPathDelimiter(Suchverzeichnis); if FindFirst(Verzeichnis + '*.*',fadirectory, Search)= 0 then begin repeat if((search.attr and fadirectory) = fadirectory) and(search.name[1] <> '.') then begin if IncludeSubDirs then GetAllDirs(Verzeichnis + Search.Name, Ergebnisliste, True); Ergebnisliste.Add(Verzeichnis + Search.Name); Result := True; end; Application.ProcessMessages; until FindNext(Search) <> 0; end; SysUtils.FindClose(search); end; |
Mit search.attr kannst du ja auch weitere Attribute abfragen, wie siehst du am Attribut faDirectory.