我为 Delphi 10.3 进行了更改,其默认TOpenDialog
包含一个预览窗格。我进行了一些搜索,发现了IFileDialogCustomize
微软提供的自定义标准WinAPI
对话框的界面。我知道我必须使用OnSelectionChange
事件处理程序来修改窗格的图片。对我来说最大的问题是:如何访问预览窗格图像IFileDialogCustomize
?这个 ItemID 是什么?我在网上找不到这个问题的任何答案。有人知道答案吗?然后请与我和社区分享!:)
为了简洁起见,我用 ... 替换了一些代码片段,因为这些是微不足道的或依赖于应用程序的部分。
procedure TMainWindow.OnSelectionChange( Sender : TObject );
var
dc : HDC;
aBMP : TBitmap;
function isSelectedFilePreviewAble : boolean;
begin
result := ...;
end;
functon getPreviewPictureDC : HDC;
var
iCustomize : IFileDialogCustomize;
h : THandle;
begin
if OpenDialog1.QueryInterface( IFileDialogCustomize, iCustomize ) = S_OK then
begin
h := iCustomize.??? this is the missing code fragment
result := GetDC( h );
end else
result := 0;
end;
procedure generatePreviewPicture;
begin
...
end;
begin
dc := getPreviewPictureDC;
if ( dc <> 0 ) then
begin
aBMP := TBitmap.Create;
try
if ( isSelectedFilePreviewAble ) then
generatePreviewPicture;
StretchBlt( aBMP.Handle, ...);
finally
aBMP.Free;
ReleaseDC( dc );
end;
end;
end;