代码之家  ›  专栏  ›  技术社区  ›  Eduardo Mauro

在Delphi中使用AcroPDF调整大小的问题

  •  1
  • Eduardo Mauro  · 技术社区  · 15 年前

    我成功地在我的应用程序中添加了AcroPDF。当需要显示PDF时,我动态创建AcroPDF实例,并将其插入到TPanel中,align设置为alClient。我的问题是,当窗体/面板调整大小时,AcroPDF不会跟随。只有在加载新文件时。我试了好几种方法都没有成功。我该怎么办?

    2 回复  |  直到 15 年前
        1
  •  5
  •   mghie    15 年前

    这是Adobe OCX控件的最新版本的一个问题,您可以通过重新调整控件的焦点来解决这个问题。在一个预览对话框中(它有一个嵌入的、与客户端对齐的AcroPdf控件),我使用以下命令 OnResize 表单处理程序:

    if Visible and (fPreviewV7 <> nil) then begin
      FocusControl(nil);
      FocusControl(fPreviewV7);
    end;
    
        2
  •  1
  •   Schnider    15 年前

    procedure TForm.PanelResize(Sender: TObject);
    var
      rc: TRect;
      h: THandle;
    begin
      if Assigned(AcroPdf) then
      begin
        if (Windows.GetClientRect(AcroPdf.Handle, rc)) then
        begin
          h := Windows.FindWindowEx(AcroPdf.Handle, 0, PChar('Static'), nil);
          if (h <> 0) then
            Windows.MoveWindow(h, 0, 0, rc.Right - rc.Left, rc.Bottom - rc.Top, True);
        end;
      end;
    end;
    

    AcroPdf主窗口的子窗口没有调整大小。所以我们通过它的类名“Static”找到它,并手动移动它来填充整个父窗口。此代码无法在其他版本的Acrobat Reader上运行,因为窗口层次结构和类名可能不同。