如何在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;
答案 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
属性。