2010-10-27 6 views
1

J'ai réussi à ajouter AcroPDF dans mon application. Lorsqu'un fichier PDF doit être affiché, je crée dynamiquement une instance d'AcroPDF et l'insère dans un TPanel avec align défini sur alClient. Mon problème est que lorsque le formulaire/panneau est redimensionné l'AcroPDF ne suit pas. Seulement si un nouveau fichier est chargé. J'ai essayé plusieurs solutions en vain. Que devrais-je faire?Redimensionner le problème en utilisant AcroPDF dans Delphi

Répondre

5

Il s'agit d'un problème avec les versions récentes du contrôle Adobe OCX, que vous pouvez contourner en recentrant le contrôle. Dans une boîte de dialogue de prévisualisation je (qui a un intégré, le contrôle de AcroPDF client aligné) J'utilise le gestionnaire OnResize suivant pour la forme:

if Visible and (fPreviewV7 <> nil) then begin 
    FocusControl(nil); 
    FocusControl(fPreviewV7); 
end; 
+0

Super !! Merci beaucoup. –

1

Si vous utilisez ActiveX de la version 9 d'Acrobat Reader essayez ce code dans OnResize L'événement de 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; 

Le problème en ce que la fenêtre enfant de la fenêtre principale AcroPdf n'est pas redimensionnée. Nous l'avons donc trouvé par son nom de classe "Static" et le déplaçons manuellement pour remplir la fenêtre parent entière. Ce code ne peut pas fonctionner sur d'autres versions d'Acrobat Reader, car la hiérarchie des fenêtres et le nom de la classe peuvent différer.

Questions connexes