2

私は Delphi 10.3 用に変更し、そのデフォルトTOpenDialogにはプレビュー ペインが含まれています。いくつか検索したところ、標準ダイアログIFileDialogCustomizeをカスタマイズするために Microsoft が提供するインターフェイスを見つけました。ペインの画像を変更するには、イベント ハンドラーを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;
4

1 に答える 1