我正在尝试使用FileCtrl.SelectDirectory()
的重载版本:
function SelectDirectory(const Caption: string; const Root: WideString; var Directory: string; Options: TSelectDirExtOpts = [sdNewUI]; Parent: TWinControl = nil): Boolean; overload;
我想包含sdNewUI
选项,但无法编译我的代码:
procedure TRecDataForm.DirButtonClick(Sender: TObject);
var
sdNew: TSelectDirExtOpt;
begin
chosenDirectory := 'C:\';
if selectdirectory(chosenDirectory, [sdNewUI], 0) then
DirLabel.Caption := chosenDirectory;
end;
那里有工作代码吗?
SelectDirectory()
的第一个重载版本:function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint): Boolean;
但是它试图在sdNewUI
参数中传递Options
标志。该标志对于TSelectDirOpts
无效,这就是为什么代码无法编译的原因。它仅对TSelectDirExtOpts
有效,SelectDirectory()
的第二个重载版本使用它:
function SelectDirectory(const Caption: string; const Root: WideString; var Directory: string; Options: TSelectDirExtOpts = [sdNewUI]; Parent: TWinControl = nil): Boolean; overload;
您的代码应改为这样:
procedure TRecDataForm.DirButtonClick(Sender: TObject); var chosenDirectory: string; begin chosenDirectory := 'C:\'; if SelectDirectory('Select a Directory', '', chosenDirectory, [sdNewUI], Self) then DirLabel.Caption := chosenDirectory; end;
UPDATE:原来在Delphi 2005中引入了
TSelectDirExtOpts
,这意味着您不能在Delphi 7中使用sdNewUI
标志。因此,您将不得不省略添加的2个新参数。SelectDirectory()
的重载(在Delphi 7中确实存在):procedure TRecDataForm.DirButtonClick(Sender: TObject); var chosenDirectory: string; begin chosenDirectory := 'C:\'; if SelectDirectory('Select a Directory', '', chosenDirectory) then DirLabel.Caption := chosenDirectory; end;
否则,您将必须使用:
TBrowseForFolder
操作(如果在Delphi 7中可用):TBrowseForFolder
uses
..., StdActns;
procedure TRecDataForm.DirButtonClick(Sender: TObject);
var
dlg: TBrowseForFolder;
begin
dlg := TBrowseForFolder.Create(nil);
try
dlg.RootDir := 'C:\';
if dlg.Execute then
DirLabel.Caption := dlg.Folder;
finally
dlg.Free;
end;
end;
函数:SHBrowseForFolder()