Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Versteckte Verzeichnisse nur im SelectDialog anzeigen (https://www.delphipraxis.net/80002-versteckte-verzeichnisse-nur-im-selectdialog-anzeigen.html)

RWarnecke 1. Nov 2006 12:09


Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Hallo,

ich habe die folgende Funktion von den Schweizern genutzt um mir einen SelectDialog anzuzeigen. Nur komme ich nicht dahinter, wie ich nur in diesem Dialog die versteckten Verzeichnisse anzeigen kann. Ich könnte es über die Registry machen, nur finde ich diesen Weg etwas unschön. Deshalb meine Frage, gibt es eine andere Möglichkeit, wenn ja welche ?

Luckie 1. Nov 2006 12:19

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Was sind denn für dich "versteckte" Verzeichnisse? Ordner mit dem Attribut "hidden"?

RWarnecke 1. Nov 2006 14:38

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Zitat:

Zitat von Luckie
Was sind denn für dich "versteckte" Verzeichnisse? Ordner mit dem Attribut "hidden"?

Wenn ich diese beiden Optionen unter Ordneroptionen aktiviere
  • Geschütze Systemdateien ausblenden (empfohlen)
  • Versteckte Dateien und Ordner ausblenden

sehe ich ja bestimmte Dateien und Verzeichnisse nicht. Ich möchte lediglich dem System sagen, wenn mein SelectDirectory-Dialog geöffnet wird, dass diese beiden Einstellungen nicht gelten oder relevant sind.

Also im Klartext, die Ordner sollten angezeigt werden, egal wie die Einstellungen unter Ordneroptionen aussehen.

Luckie 1. Nov 2006 14:59

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Hben diese Einstellungen denn überhaupt einfluss auf den Dialog? Ist mir bisher noch nicht bewußt geworden. Ich meine nämlich, dass diese nur für den Explorer gelten.

RWarnecke 1. Nov 2006 15:10

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Mit der oben angegeben Funktion von den Schweizern haben diese Einstellungen Auswirkungen auf den Dialog. Wenn Du eine andere Lösung kennst, dann nur her damit. Es sei aber gleich vorausgesagt, dass der Befehl SelectDirectory auf meinem Rechner keinen Dialog anzeigt und soweit ich es aus der Hilfe verstanden habe, kann ich bei diesem Befehl auch kein Startverzeichnis mitgeben oder sehe ich das Ganze falsch ?

TurboMartin 1. Nov 2006 16:22

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Bei der Funktion musst du irgendeinen Flag mitgeben. Einen anderen als 25. welchen statdessen, weiß ich aber nicht :?

RWarnecke 1. Nov 2006 18:17

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Zitat:

Zitat von TurboMartin
Bei der Funktion musst du irgendeinen Flag mitgeben. Einen anderen als 25. welchen statdessen, weiß ich aber nicht :?

Also ich habe jetzt mal ein bisschen im I-Net gesurft und das Flag ist nur für die Darstellung dar und was ich anzeigen möchte. (z.B. Nur Drucker, Nur Computer oder Systemverzeichnisse)

Das ganze löst aber nicht mein Problem. Hat keiner eine Idee ?

RWarnecke 3. Nov 2006 10:33

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Hat denn wirklich keiner eine Idee, wie ich das ganze verwirklichen kann ?

himitsu 3. Nov 2006 12:29

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Also da steht anscheinend wirklich nichts passendes drin,
MSDN-Library durchsuchenShBrowseForFolder > MSDN-Library durchsuchenBROWSEINFO Structure

Aber wenn ich mih nicht irre, dann gab es bei auch noch ein paar Ereignisse in der BrowseCallbackProc, welche man für sowas gebrauchen kann.

Jedenfalls gab es damals bei meinen Versuchen mit diesem Dialog auch die Möglichkeit über ein entsprechendes Ereignis zu bestimmen, ob ein Eintrag angezeigt werden soll, oder nicht. (also den Vorgabewert zu ändern).


Wei jezuz auch nicht wo und ob das alte Projekt dazu noch irgendwo rumliegt ... wenn ich's mal sehe meld ich mich.

[add]
Ach ja, der Dialog kapselt doch auch nur ein Explorerfenster und verwendet demnach auch die Explorereinstellungen (Optionen).

RWarnecke 3. Nov 2006 14:11

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Zitat:

Zitat von himitsu
[add]
Ach ja, der Dialog kapselt doch auch nur ein Explorerfenster und verwendet demnach auch die Explorereinstellungen (Optionen).

Und genau das will ich ja für diese Variante anderst einstellen.

himitsu 3. Nov 2006 14:23

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Ich weiß und wie gesagt, ich werd mal sehn, ob ich was finde.
Ich bin mir jedenfalls recht sicher, daß es 'ne Möglichkeit gibt da was zu machen.

Du kannst ja inzwischen auch mal seber nachsehen, ob nicht auch jetzt schon andere Ereignisse der BrowseCallbackProc übergeben werden.
(in die CASE ein ELSE anhängen und schauen ob/was dort ankommt)

TurboMartin 3. Nov 2006 16:20

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Wenn du die Flags $00000004 und $25 setzt, müsste esgehen. :zwinker: :gruebel:

RWarnecke 3. Nov 2006 18:48

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Wenn ich das Flag so ändere :
Delphi-Quellcode:
with BrowseInfo do
begin
  hwndOwner := hOwn;
  pidlRoot := RootItemIDList;
  pszDisplayName := Buffer;
  lpszTitle := PChar(Caption);
  ulFlags := $00000004 + uFlag;
  lpfn := @BrowseCallbackProc;
  lParam := Integer(PChar(Path));
end;
Das funktioniert aber trotzdem nicht oder habe ich das verkehrte Flags geändert.

TurboMartin 4. Nov 2006 13:58

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Du muss so aufrufen:
Delphi-Quellcode:
SelectDirectoryEx(Handle, Path, 'Select Directory Sample', 'C:\', $25 and $00000004);
:zwinker: :feuerchen:

RWarnecke 4. Nov 2006 21:00

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Ich habe das jetzt verschiedensten Flag-Einstellungen probiert von der BrowseInfo, nur leider funktioniert da garnichts von.

himitsu 6. Nov 2006 10:40

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Wie gesagt, im MSDN/PSDK sind keine Flags dafür aufgeführt, es scheint also keine Flags zu geben.

Hast du inzwischen mal geprüft, ob da noch andere Ereignisse ankommen?
Code:
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: Cardinal;
  lpData: Cardinal): Integer; stdcall;
var
  PathName: array[0..MAX_PATH] of Char;
begin
  case uMsg of
    BFFM_INITIALIZED:
      SendMessage(Hwnd, BFFM_SETSELECTION, Ord(True), Integer(lpData));
    BFFM_SELCHANGED:
      begin
        SHGetPathFromIDList(PItemIDList(lParam), @PathName);
        SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, Longint(PChar(@PathName)));
      end;
[b][color=#ff0000]   else
      begin
        ...
      end;[/color][/b]
  end;
  Result := 0;
end;

RWarnecke 6. Nov 2006 16:09

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Nee, da kommen keine anderen Ereignisse an. Es wird lediglich immer nur BFFM_INITIALIZED und BFFM_SELCHANGED ausgeführt. Ich habe das ganze nur so geprüft, dass ich mir eine kleine ShowMessage dort eingebaut habe. Danach habe ich es getestet und bei den Tests ist die Case-Anweisung nie in die Else-Schleife reingegangen.

himitsu 7. Nov 2006 12:10

Re: Versteckte Verzeichnisse nur im SelectDialog anzeigen
 
Tut mir Leid, aber ich hab mich getäucht.

Das Ereignis welches ich im Kopf hatte war MSDN-Library durchsuchenCDN_FILEOK und sowas wird (anscheinend) nur von MSDN-Library durchsuchenGetOpenFileName und MSDN-Library durchsuchenGetSaveFileName gesendet.



Man könnte höchstens versuchen die Nachrichten der ListView umzuleiten und die nötigen Ereignisse dort abzuarbeiten.


PS: Die DialogID der TreeView könnte irgendwo zwischen 14140 und 14155 liegen.


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