Изменить размер проблемы с помощью AcroPDF в Delphi - PullRequest
1 голос
/ 27 октября 2010

Я успешно добавил AcroPDF в свое приложение. Когда нужно отобразить PDF, я динамически создаю экземпляр AcroPDF и вставляю его в TPanel с выравниванием, установленным в alClient. Моя проблема заключается в том, что при изменении формы / панели AcroPDF не следует. Только если загружен новый файл. Я пробовал несколько решений безрезультатно. Что мне делать?

Ответы [ 2 ]

5 голосов
/ 27 октября 2010

Это проблема последних версий элемента управления Adobe OCX, которую можно обойти, переориентировав элемент управления. В диалоговом окне предварительного просмотра (которое имеет встроенный, выровненный клиентом элемент управления AcroPdf) я использую следующий обработчик OnResize для формы:

if Visible and (fPreviewV7 <> nil) then begin
  FocusControl(nil);
  FocusControl(fPreviewV7);
end;
1 голос
/ 27 октября 2010

Если вы используете ActiveX из версии 9 Acrobat Reader, попробуйте этот код в событии OnResize TPanel:

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, поскольку иерархия окон и имена классов могут различаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...