[Delphi7] DirectoryListBox

Amroc

Stammgast
Ich hab ein Problem mit der DirectoryListBox von Delphi7...
Diese Komponente (sollte) alle Ordner anzeigen, die auf einem Laufwerk vorhanden sind.
Hier ein Bild, damit ihr sicher versteht was ich meine ;) (die Komponente links unten)

Nun das Problem ist, dass mir diese Komponente nicht alle Ordner anzeigt. Einige werden einfach nicht angezeigt. Die Ordner sind weder schreibgeschützt noch vom Namen her speziell.
Habe schon nach einem Bug gegooglet aber bin nicht fündig geworden. Habt ihr eine Idee, was da los sein könnte?
 
A

abu

Guest
Werden ev. leere Directories nicht angezeigt? Oder lassen sich die nicht angezeigten Directories irgendwie sonst charakterisieren?
 

Amroc

Stammgast
Nein, die Directories sind nicht leer und auch sonst kann ich absolut keine Dinge feststellen, die irgendwie anders sind.
 

Amroc

Stammgast
Eine Berechtigungs-Sache kann es auch nicht sein?

Hab auf deinen Post hin nochmals alles überprüft und folgendes rausgefunden:
Wenn ich im Explorer die Ordnereigenschaften einsehe ist bei allen Ordner, die in der DirectoryListBox nicht angezeigt werden, das Attribut 'Versteckt' deaktiviert (also so grau, damit man es nicht anklicken kann), aber nicht markiert. Bei den Ordnern die angezeigt werden ist 'Versteckt' nicht deaktiviert und man kann die Checkbox anklicken.
Wie krieg ich hin, dass dies auch bei den andern Ordner der Fall ist?

Edit: Hab ne Lösung gefunden, wie ich das mit Delphi machen kann:

Code:
  if SetFileAttributes('H:\Music\Interpret\Disc 1',
                       FILE_ATTRIBUTE_NORMAL) then
    Showmessage('Attribut wurde geändert')
  else
    Showmessage('Attribut wurde nicht geändert');
Die Funktion SetFileAttributes setzt die Attribute des Files/Ordners auf 'normal'. Gibt noch andere Möglichkeiten: Link zu Delphi-Treff

Danke für deinen Hinweis, abu!
 
Zuletzt bearbeitet:
A

abu

Guest
Wenn die Checkbox grau ist bedeutet dies, dass nur ein Teil der Dateien darunter versteckt sind und nicht alle. Wenn du das auf diesem Weg lösen willst: attrib /s -h

Aber könntest du nicht beim Aufruf von deinem File-Dialog gleich den Filter richtig setzen?
 
Zuletzt bearbeitet:

Amroc

Stammgast
Danke für die Antwort. Deshalb war das grau!
Hab selber schon eine Lösung gefunden (hab ich im oberen Post reineditiert)
 
A

abu

Guest
Ich auch. Meine Empfehlung ist, die Flags (OFN_FORCESHOWHIDDEN) beim FileDialog richtig zu setzen.
 
A

abu

Guest
Ich kanns versuchen. Der FileOpen-Dialog ist soweit ich weiss ein sog. CommonControl, das von verschiedenen Programmiersprachen aufgerufen werden kann, so auch von Delphi. Diese Aufruf können bzw. müssen normalerweise verschiedene Flags übergeben werden, die dem Control sagen, wie es sich zu verhalten hat. Eines dieser Flags ist das besagte OFN_FORCESHOWHIDDEN, dadurch werden auch versteckte Dateien und Verzeichnisse temporär für das Control sichtbar. Dieses Flag zu benutzen erscheint mir eigentlich sinnvoller, als die Hidden-Files der Dateien zu löschen, ev. darf oder sollte man das gar nicht machen. Du müsstest also deinen Aufruf vom FileDialog anpassen.

Leider kenne ich das API zum Aufruf in DELPHI nicht, ich habs nicht so mit DELPHI, bin ein C++ Fan. Falls es dir hilft, hier etwas aus meiner C++/MFC-Küche:

Code:
const DWORD [B]fileDlgFlags[/B] = [B]OFN_FORCESHOWHIDDEN[/B] | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR;

CFileDialog dlg(FALSE, extDev, name_, [B]fileDlgFlags[/B], gdeFilter, NULL);

if (dlg.DoModal() == IDOK)
    {
    // ...
    }
 

Amroc

Stammgast
Ja, das wäre allerdings sinnvoller. Denn dann muss ich nicht alle Ordner abändern...
Ich denke mit diesen Informationen werde ich auch für Delphi etwas passendes finden, vielen Dank!
 
Oben