Hab's noch ein bisschen überarbeitet:
Delphi-Quellcode:
function SelectDirectory(const Caption: string;
var Directory: string; Options: TFileDialogOptions; Parent: TWinControl): Boolean;
var
dlg: TFileOpenDialog;
begin
if (Win32MajorVersion >= 6) and UseLatestCommonDialogs then
begin
dlg := TFileOpenDialog.Create(nil);
try
dlg.Title := Caption;
dlg.FileName := Directory;
dlg.Options := Options + [fdoPickFolders];
Result := dlg.Execute(Parent.Handle);
if Result then
Directory := dlg.FileName;
finally
dlg.Free;
end;
end
else
begin
Result := FileCtrl.SelectDirectory(Caption, '', Directory, [sdNewFolder, sdShowEdit, sdShowShares, sdNewUI], Parent);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
UseLatestCommonDialogs := CheckBoxUseLatestCommonDialogs.Checked;
if SelectDirectory('Test', Directory, [], Self) then
Label1.Caption := Directory;
end;
Vielleicht kann man die beiden Option-Typen noch besser synchronisieren. Aber z.B. scheint sdShowShares nichts mit fdoShareAware zu tun zu haben, ebensowenig sdValidateDir mit fdoNoValidate, und mehr "Pärchen" habe ich auf die Schnelle nicht gefunden.
Und ab welcher Delphiversion läuft das? Ab wann steht TFileOpenDialog und UseLatestCommonDialogs zur Verfügung?
Ich hab's mit D2007 ausprobiert.
Update: Wie zu erwarten lässt es sich mit Turbo Delphi nicht kompilieren.