Je réalise une vaste DLL de service en Delphi 6 Personal Edition, pour un usage par un autre langage (un clône de Basic, en fait).
Dans cette DLL, j'ai une série de fonctions gérant un WebBrowser créé dynamiquement. Et je veux y ajouter une fonction de capture, non pas dela partie visible à l'écran, mais de la page web entière, même ce qui est hors champs. J'ai pas map cheché sur internet, et j'ai trouvé comment faire. Je capte la totalité du canvas et le dépose dans une TBitmap crée dynamiquement cet effet. Ensuite, en fonction de la sortie choisie, je l'envoie sur l'imprimante par défaut du système, sur une imprimante choisie dans la liste des imprimantes du système ou dans le presse-papier. Et dans ce dernier cas, je l'envoie également dans un TPicture pour vérification.
Cela marche parfaitement pour des pages en mode paysage (hauteur plus grande que largeur). En tout cas, pour la plupart d'entre elles. Certaines résistent. Et cela ne marche pas pour des pages en mode paysage (largeur plus grande que hauteur). Là, l'adaptation à taille du canvas de sortie ne se fait pas, tout simplement, et je ne comprends pas pourquoi.
J'ai fait un petit projet de démo dont je poste le zip en pièce jointe. Le fichier EXE est joint et il fonctionne pour mettre en évidence le problème. Il montre deux forms:
la form principale a une combo avec la liste des imprimantes installées, et l'imprimante par défaut est sélectionnée. Une autre combo donen deux URLs, dont la première est sélectionnée: une page en mode portait pour lequel le programme fonctionne et montre ce qui devrait se passer. Un bouton "Charger URL" charge cette RL dans le TWebBrowser de la form secondaire. Une checkbox pour afficher ou non les dimensions des canvas et bitmaps au cours du processus. Puis 3 boutons d'impression en fonction des 3 modes d'impression prévus dans mon code. La partie "impression" fonctionne bien dans tous les cas.
Voici une capture d'écran avec impression dans le presse-papier avec l'URL en mode portrait:
Certes, je sais: il y a un problème de déformation car je n'ai pas encore veillé à la proportionnalité des dimensions lors du changement de taille. Cela viendra, mais ce n'est pas l'objet de ma demande. Il est prévu de passer en édition multi-page si l'image ne tient pas dans la page sans déformations, ce qui est assez facile à faire en prenant pour chaque page la partie concernée du canvas de la bitmap récupérer. L'affichage dans le PICTURE est secondaire et ne sert qu'à vérifier qu'on a bien récupéré le canvas total de la page contenue dans le WebBrowser. L'important, c'est que l'image complète soit dans le presse-papier.
La seconde capture montre le problème, à l'aide de la seoconde URL dans la combo URL:
Subitement, il n'y a plus de changement de dimension de l'image. Pourquoi ?
Le projet complet est en pièce jointe. Merci d'avance pour votre aide.
Partager