【发布时间】:2022-02-04 08:01:38
【问题描述】:
我想对我的 Delphi 7 应用程序的 GUI 进行现代化改造,我已经有了 .manifest 文件,它看起来很不错,但是 Fileopen 对话框很糟糕。如何让它们变得现代?
我目前正在使用此代码。 它需要使用什么,例如IFileOpenDialog 相反,如何为此编译标头,或对 dialogs.pas 进行任何调整?
FileOpenDialog := TOpenDialog.create(parent);
FileOpenDialog.DefaultExt := '*.x';
FileOpenDialog.Filter := 'my|*.x|Text File (CSV)|*.csv';
FileOpenDialog.options := [ofHideReadOnly,ofFileMustExist ,ofNoChangeDir,ofPathMustExist ];
if FileOpenDialog.Execute then begin
// do my tricks with FileOpenDialog.filename
FormUpdate;
end;
下面的IFileDialog示例代码不能用D7编译:
var
FolderDialog : IFileDialog;
hr: HRESULT;
IResult: IShellItem;
FileName: PChar;
Settings: DWORD;
begin
if Win32MajorVersion >= 6 then
begin
hr := CoCreateInstance(CLSID_FileOpenDialog,
nil,
CLSCTX_INPROC_SERVER,
IFileDialog,
FolderDialog);
if hr = S_OK then
begin
FolderDialog.SetOkButtonLabel(PChar('Select'));
FolderDialog.SetTitle(PChar('Select a Directory'));
hr := FolderDialog.Show(Handle);
if hr = S_OK then
begin
hr := FolderDialog.GetResult(IResult);
if hr = S_OK then
begin
IResult.GetDisplayName(SIGDN_FILESYSPATH,FileName);
ConfigPathEdit.Text := FileName;
end;
end;
end;
end;
【问题讨论】:
-
Delphi 7 不支持开箱即用的新对话框。如果您没有找到任何第 3 方控件,您可能需要自己实现所有需要的东西。您可以考虑升级您的 Delphi 版本。
-
很容易修补 VCL 以便显示新对话框,即使使用基于 GetOpenFileName 的包装器也是如此。但是,最好使用 IFileDialog,因为它支持任意长度的多选对话框。
-
我放弃了 Windows 对话,最终以自己的方式完成了一个表单,我可以在其中拥有用户可配置的快捷按钮和自动完成递归搜索。做起来并不难。
-
@SilverWarior:OP 可能在他们的
ShellAPI.pas中找不到IFileDialog。IFileDialog于 2007 年在 Windows Vista、IIRC 中引入。2007 年引入的接口声明在 2002 年的 Delphi 7 中很少可用。