Standard Path-Dialog anzeigen |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Folgende Funktion zeigt den Standarddialog von Windows an, um ein Verzeichnis auswählen zu lassen. Die Funktion erwartet zwei Parameter. Über den ersten Parameter kann man das Rootverzeichnis auswählen. Auf diese Weise kann man den Dialog so aufrufen, dass beispielsweise nur Netzwerkverzeichnisse ausgewählt werden können. Dem zweite Parameter kann ein möglicher Titel für den Dialog übergeben werden. Die Funktion gibt das ausgewählte Verzeichnis zurück. Klickt der Anwender auf 'Abbrechen' gibt die Funktino einen Leerstring zurück.Es muss die Unit ShlObj eingebunden werden.
uses
ShlObj, ActiveX;
function GetFolder(const ARoot: integer; const ACaption: String): String;
var
bi: TBROWSEINFO;
lpBuffer: PChar;
pidlPrograms,
pidlBrowse: PItemIDList;
ShellH: IMalloc;
begin
if (not SUCCEEDED(SHGetSpecialFolderLocation(GetActiveWindow,
ARoot,
pidlPrograms))) then
Exit;
try
GetMem(lpBuffer, MAX_PATH);
try
bi.hwndOwner:=GetActiveWindow;
bi.pidlRoot:=pidlPrograms;
bi.pszDisplayName:=lpBuffer;
bi.lpszTitle:=PChar(ACaption);
bi.ulFlags:=BIF_RETURNONLYFSDIRS;
bi.lpfn:=NIL;
bi.lParam:=0;
pidlBrowse:=SHBrowseForFolder(bi);
if (pidlBrowse <> nil) and (SHGetPathFromIDList(pidlBrowse,
lpBuffer)) then
Result:=lpBuffer;
finally
FreeMem(lpBuffer);
end;
finally
if SHGetMalloc(ShellH) = NOERROR then
ShellH.Free(pidlBrowse);
end;
end;
Aufgerufen werden kann die Funktion beispielsweise so:
CSIDL_DRIVES bedeutet, dass der Anwender den 'Arbeitsplatz' als Rootverzeichnis angezeigt bekommt. Weitere Werte finen Sie in der Unit ShlObj oder in untenstehender Liste:
CSIDL_DESKTOP
CSIDL_INTERNET
CSIDL_PROGRAMS
CSIDL_CONTROLS
CSIDL_PRINTERS
CSIDL_PERSONAL
CSIDL_FAVORITES
CSIDL_STARTUP
CSIDL_RECENT
CSIDL_SENDTO
CSIDL_BITBUCKET
CSIDL_STARTMENU
CSIDL_DESKTOPDIRECTORY
CSIDL_DRIVES
CSIDL_NETWORK
CSIDL_NETHOOD
CSIDL_FONTS
CSIDL_TEMPLATES
CSIDL_COMMON_STARTMENU
CSIDL_COMMON_PROGRAMS
CSIDL_COMMON_STAR TUP
CSIDL_COMMON_DESKTOPDIRECTORY
CSIDL_APPDATA
CSIDL_PRINTHOOD
CSIDL_ALTSTARTUP
CSIDL_COMMON_ALTSTARTUP
CSIDL_COMMON_FAVORITES
CSIDL_INTERNET_CACHE
CSIDL_COOKIES
CSIDL_HISTORY
Des Weiteren gibt es die Möglichkeit den Benutzer über die in der Unit FileCtrl vorhandene Funktion SelectDirectory ein Verzeichnis auswählen zu lassen. Je nach Betriebssystem und Delphi-Version kann dieser Dialog allerdings veraltet aussehen. In neueren Delphi-Versionen gibt es zwei Deklarationen der Funktion:
function SelectDirectory(const Caption: string; const Root: WideString; out Directory: string): Boolean; overload;
function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint): Boolean; overload;
Erstere Funktion zeigt unter Windows 2000 und Windows XP einen zeitgemäßen Dialog an. Unter Windows NT sieht der Dialog mehr nach 16 Bit aus. Letztere Funktion zeigt auch unter Windows XP den alten Dialog an. Weitere Informationen zum Aufruf der Funktion finden Sie in der Onlinehilfe unter dem Stichwort "SelectDirectory (Funktion)".
- MessageDlg automatisch schließen
- Eigenen Message-Dialog erschaffen
- Mehrere Dateien im OpenDialog auswählen
- Eigenschaften-Dialog für Dateien anzeigen
- Öffnen-mit-Dialog anzeigen
- Laden und Speichern von Texten aus Memofeldern in Dateien
- Pfadvariablen zerpflücken
- Windows-Verzeichnis ermitteln
- System-Verzeichnis ermitteln
- Temporäres Verzeichnis ermitteln