如何在TFileDialog.OnTypeChange事件中获取piFileType

时间:2012-11-26 17:58:05

标签: delphi delphi-2010

如何在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;

2 个答案:

答案 0 :(得分:3)

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

HRESULT GetFileTypeIndex(
  [out]  UINT *piFileType
);

将Delphi转换为:

function GetFileTypeIndex(out FileType: UINT): HRESULT;

也就是说,ShlObj中的Delphi转换声明参数为var,这在语义上是不正确的。碰巧它并不重要。

将所有内容放在一起,您的代码应如下所示:

OleCheck(pfd.GetFileTypeIndex(FileTypeIndex));

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

答案 1 :(得分:1)

您可以使用FileTypeIndex属性。