用于Delphi的Outlook IPreviewHandler

时间:2010-06-21 23:59:07

标签: delphi

我已经能够为大多数文件类型实现预览处理程序,outlook msg文件除外。我怎样才能做到这一点?代码似乎无法以流或文件模式打开。

var
  ACLSID: String;
  AGUID: TGUID;
  ARect: TRect;
  FileInit: IInitializeWithFile;
  StreamInit : IInitializeWithStream;

begin
  FPreviewHandler := CreateComObject(AGUID) as IPreviewHandler;
  if (FPreviewHandler = nil) then
  begin
    MessageDlg('No preview handler found for this file format.', mtError, [mbOK], 0);
    Result := False;
    Exit;
  end;

  // First attempt opening in file mode, if fails, attempt stream mode.
  if FPreviewHandler.QueryInterface(IInitializeWithFile, FileInit) = 0 then
  begin
    FileInit.Initialize(StringToOleStr(FFileName), STGM_READ);
    FInStreamMode := False;
    FLoaded := True;
  end else
  if FPreviewHandler.QueryInterface(IInitializeWithStream, StreamInit) = 0 then
  begin
    try
      FFileStream := TFileStream.Create(FFileName, fmOpenRead);
    except on
      E: EFOpenError do
      begin
        MessageDlg(E.Message, mtError, [mbOK], 0);
        Result := False;
        Exit;
      end;
    end;
    FIStream := TStreamAdapter.Create(FFileStream, soOwned) as IStream;
    StreamInit.Initialize(FIStream, STGM_READ);
    FInStreamMode := True;
    FLoaded := True;
  end else
  begin // Cannot load file
    Result := False;
    FPreviewHandler.Unload;
    Exit;
  end;

  ARect := Rect(0, 0, AParentControl.Width, AParentControl.Height);
  Parent := AParentControl;
  Align := alClient;
  FPreviewHandler.SetWindow(Self.Handle, ARect);
  FPreviewHandler.SetRect(ARect);
  FPreviewHandler.DoPreview;
  FPreviewHandler.SetFocus;

0 个答案:

没有答案