0

如何在 FileDialog OnTypeChange 事件中获取 FileDialog 的 FileTypeIndex?

function TFileDialogEvent.OnTypeChange(const pfd: IFileDialog):
  HResult; stdcall;
var
  iCaption: string;
  iFilename: PWideChar;
begin
  {Get the current filename}
  pfd.GetFileName(iFilename);
  {Get the classname of the dialog to set the caption}
    if FClassName = 'TIEWin7FileOpenDialog' then
      iCaption := 'Open- ' + iFilename
    else
      iCaption := 'Save As- ' + iFilename;
    pfd.SetTitle(PWideChar(iCaption));
    FileTypeIndex := pfd.GetFileTypeIndex(???);
end;
4

2 回答 2

3

IFileDialog::GetFileTypeIndex包含答案的文档。该方法的 C++ 签名是:

HRESULT GetFileTypeIndex(
  [out]  UINT *piFileType
);

将 Delphi 转换为:

function GetFileTypeIndex(out FileType: UINT): HRESULT;

也就是说,Delphi 翻译ShlObj声明参数var是语义上不正确的。碰巧它并不重要。

把它们放在一起,你的代码应该是这样的:

OleCheck(pfd.GetFileTypeIndex(FileTypeIndex));

请注意,我添加了一些错误检查。你也应该。您问题中的代码调用了三种不同的 COM 方法,并且在每种情况下都无法检查错误。

于 2012-11-26T19:58:57.173 回答
1

您可以使用该FileTypeIndex物业。

于 2012-11-26T21:05:00.983 回答