Delphi 如何在TFileDialog.OnTypeChange事件中获取piFileType
如何在FileDialog OnTypeChange事件中获取FileDialog的FileTypeIndexDelphi 如何在TFileDialog.OnTypeChange事件中获取piFileType,delphi,delphi-2010,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
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;
要添加的文档包含答案。该方法的C++签名是:
HRESULT GetFileTypeIndex(
[out] UINT *piFileType
);
这可以翻译为德尔福:
function GetFileTypeIndex(out FileType: UINT): HRESULT;
也就是说,ShlObj
中的Delphi翻译将参数声明为var
,这在语义上是不正确的。碰巧这并不重要
把它们放在一起,您的代码应该如下所示:
OleCheck(pfd.GetFileTypeIndex(FileTypeIndex));
注意,我添加了一些错误检查。你也应该。问题中的代码调用三种不同的COM方法,并且在每种情况下都无法检查错误。文档中包含答案。该方法的C++签名是:
HRESULT GetFileTypeIndex(
[out] UINT *piFileType
);
这可以翻译为德尔福:
function GetFileTypeIndex(out FileType: UINT): HRESULT;
也就是说,ShlObj
中的Delphi翻译将参数声明为var
,这在语义上是不正确的。碰巧这并不重要
把它们放在一起,您的代码应该如下所示:
OleCheck(pfd.GetFileTypeIndex(FileTypeIndex));
注意,我添加了一些错误检查。你也应该。您问题中的代码调用了三种不同的COM方法,在每种情况下都无法检查错误。您可以使用该属性。您可以使用该属性。
var FileTypeIndex:UINT;如果成功,则开始(pfd.GetFileTypeIndex(FileTypeIndex)),然后{完成}结束代码>。这在MSDN文档中应该很清楚。仍然需要第二个问题的答案。。。我为此提出了一个新问题。@Bill我从这里删除了第二个问题,因为你在另一个问题中提出了这个问题。@Bill-什么是TFileDialog?var FileTypeIndex:UINT;如果成功,则开始(pfd.GetFileTypeIndex(FileTypeIndex)),然后{完成}结束代码>。这在MSDN文档中应该很清楚。仍然需要第二个问题的答案。。。我为此提出了一个新问题。@Bill我从这里删除了第二个问题,因为你在另一个问题中提出了这个问题。@Bill-什么是TFileDialog?