Bonjour à toutes et à tous,
Tout d'abord je tiens à m'excuser auprès de Zazaraignée et OhMonBato pour mon silence radio de ces dernières semaines. Loin de moi l'envie de ne pas répondre, mais le boulot étant ce qu'il est, je n'ai vraiment pas eu le temps de venir leurs répondre.
Ceci étant je le ferais bientôt, sinon pour résoudre mon prblème qui n'en plus tellement un au moins pour la culture générale...
______________________________________________________
Passons au choses sérieuses...
Voici ce qui m'amène parmis vous.
Mon projet avance bien pour ceux qui m'auraient suivis pas à pas dans son déroulement. Il ne me reste plus à vrai dire q'une seule chose à mettre au point.
L'impression d'un rapport concernant les tir effectués.
J'ai choisis d'utiliser le format PDF pour se faire. Facile, transportable. Optimal en somme.
Je résume ma situation.
Je possède une form nommé "Form-AperçuAvantImpression" qui vous l'aurez deviné sert de mise en page de mon rapport.
Sur cette form est disposé quelques label identifiant ci et là les caractéristiques importantes...
Et surtout une PictureBox, contenant elle une courbe(la pression en fonction du temps par exemple).
Pour remplir cette PictureBox une simple boucle for suffit:
On peut difficilement faire plus simple!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 For I=Debut To Fin Picture_PressionTemps.Line= (x1,y1)-(x2,y2),vbBlue Next I
Evidement j'ai définie l'ensemble des scale avant la boucle for comme tel:
Pourquoi ces valeurs, une petite explication s'impose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Picture_PressionTemps.ScaleLeft=0 Picture_PressionTemps.ScaleTop=-20 Picture_PressionTemps.ScaleWidth=2 Picture_PressionTemps.ScaleHeight=-20
Pour mes scaletop et scaleheight égaux respectivement à 20 et -20, cette valeur est en faite une pression max que je récupère. Ici 20 Bars(pour ceux qui ont suivis mon projet, vous aurez deviné que ce ne sont pas des valeurs définitive, là je m'entraine sur la petite soeur du système). Et pour le scalewidth=2 c'est parce que je fais l'acquisition de données pendant 2ms.
Voilà pour ca.
Je précise que ce petit bout de code est sur le Form_AperçuAvantImpression_Load() et que j'ai placé la propriété du PictureBox.AutoRedraw=TRUE.
Aussi simplement que ça. Une form, un PictureBox avec un graphique fait de PictureBox.Line et quelques label.
Maintenant passaons à la partie qui fait défaut.
Je place un bouton Imprimer sur la form qui doit, logiquement, m'imprimer dans un fichier PDF le contenu de ma Form_AperçuAvantImpression.
Le code est on ne peut plus simple:
Difficile là aussi de faire plus simple...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub Bouton_Imprimer_Click() PrintForm End Sub
Cela marche. Disons plutôt que VB ne me génère aucune erreur, PDFCreator se lance correctement, crée un fichier PDF correctement et me l'affiche.
Et là il y a comme un problème.
En effet l'impression de la form se fait correctement. On voit tout. Les labels, le bouton Imprimer et la PictureBox...
Toutes ces bebêtes placées au bon endroit sur la feuille PDF.
Le problème réside dans l'affichage des courbes à l'intérieur de ma PictureBox.
Il y a bel et bien ma courbe de pression en fonction du temps qui s'imprime sur mon PDF mais... elle n'est pas au bon endroit dans ma PictureBox.
J'entends par là qu'elle à les bonnes dimensions. Par exemple si j'avais une PictueBox de 1cm x 1cm la courbe ferait 1cm x 1cm. Si j'avais une PicureBox de 15cm x 15cm, la courbe aurait les mêmes dimensions.
Non simplement elle n'est pas "centrée" par rapport à la PictureBox.
En l'occurence elle s'affiche en partant du haut à gauche de la page PDF quelques soit l'emplacement de la PictureBox...
Je précise aussi qu'elle n'apparait que dans la PictureBox (d'ailleurs j'ai cru depuis deux jours qu'elle n'aparaissait pas étant donné que j'avais mis ma PictureBox au centre de ma form... de fait il n'y avait pas "un bout" de courbe dans ma PictureBox puisqu'elle était tracée depuis le haut à gauche...).
Donc en résumé, ce que j'ai pu en déduire avec des termes que j'espere sont appropriés.
Le conteneur est donc ma PictureBox. Le contenant est ma courbe.
Les propriétés de mon conteneur tel que les scale et les dimensions sont correctes.
Les propriétés Scale de mon contenant sont bonnes étant donée que la courbe apparait à la taille de la PictureBox.
Ce qui n'est pas correct ce sont les propriétés left, top de mon contenant.
En effet je ne sais pas comment "dire" à VB de tracer la courbe dans la PictureBox, enfin plutôt à l'endroit où est situé ma PictureBox...
Je pense que vous avez saisie la nuance![]()
=> Parmis mes différents essai j'ai essayé de mettre une image dans ma PictureBox(plutôt qu'une suite de ligne...). Miracle ô grand miracle, lors de l'impression, l'image est exactement là où il le faut, c'est à dire dans la picturebox, où que se trouve cette dernière...
De fait je me demande si je ne suis pas tombé dans une sorte de faille de VB.
Et d'autre part je me demande si il n'y aurait pas moyen de "grujer"(feinter) la chose en créant une photo de ma courbe et en la passant comme image à ma picturebox avant de lancer le PrintForm. De fait j'aurais contourné le problème...
Voilà où je suis rendu. Je sens que je tourne autour du pot mais je n'arrive pas à boucler la boucle...
Estce que vous auriez une idée sur la question ???
Estce que mon idée de contournement est faisable ? Viable surtout ?
Enfin... je compte sur vos lumières
D'avance merci
Cordialement
~~ La Praline ~~
... un choco qui se rend fou mais qui a bientôt finit !!!
Partager