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
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;
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.
Super !! Merci beaucoup. –