Bonsoir,
dans mon application je dois imprimer le graphique que je génère avec quelques informations se trouvant dans des TLabel et un autre TImage autour de l'image contenant le graphique.
Je me débrouille donc pour faire un screen de tout ça, et je l'envoies à l'imprimante, mais je n'obtient qu'une page blanche.
Alors que ça fonctionne, quand j'utilise pdf créator. Enfin j'ai des problèmes d'échelles de l'image suivant différents PC. Ca vient peut être de la différence de résolution de l'écran
Je vois pas bien comment régler ces problèmes.
Mon code pour l'export PDF :
Pour l'impression : (assez ressemblant)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 HDC ScreenSrc; //déclaration d'une variable recevant un device context Graphics::TBitmap *Bitmap = new Graphics::TBitmap; //bitmap pour stocker l'imprim écran provisoir Bitmap->Width = Form1->Image1->Width; Bitmap->Height = (Form1->Image1->Height)+60; // Device Context de l'écran (ou (0))- pointeur-------------------------------------------------------------------------------------------------------- ScreenSrc = GetDC(HWND_DESKTOP); //destination de l'imprim écran, x et y Dest, largeur/hauteur Dest, source , abscisse et ordonnée de la source(5 pour bordure du cadre), opération copy--------- BitBlt(Bitmap->Canvas->Handle, 0, 0, Bitmap->Width, Bitmap->Height, ScreenSrc, Form1->Left+Form1->Image1->Left+5, Form1->Top+46, SRCCOPY); TPrinter * Pr=Printer(); Pr->Orientation=poLandscape; //mode paysage int prnindex = Pr->Printers->IndexOf("PDFCreator"); //recuperer l'index de pdfcreator if (prnindex==-1) ShowMessage("PDFCreator n'est pas installer"); else { Pr->PrinterIndex=prnindex; Form1->PrntDial->Execute(); Pr->BeginDoc(); //Définition de la zone d'enregistrement dans le pdf TRect Dest=Rect(300,500,Bitmap->Width*9, Bitmap->Height*9); //Récupération de ce qu'il faut enregistrer TRect Sour=Rect(0, 0,Bitmap->Width,Bitmap->Width); //définition de ce qu'il va être enregistré Pr->Canvas->CopyRect(Dest,Bitmap->Canvas,Sour); Pr->EndDoc(); }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 HDC ScreenSrc; //déclaration d'une variable recevant un device context Graphics::TBitmap *Bitmap = new Graphics::TBitmap; //bitmap pour stocker l'imprim écran provisoir Bitmap->Width = Form1->Image1->Width; Bitmap->Height = (Form1->Image1->Height)+60; // Device Context de l'écran (ou (0))- pointeur-------------------------------------------------------------------------------------------------------- ScreenSrc = GetDC(HWND_DESKTOP); //destination de l'imprim écran, x et y Dest, largeur/hauteur Dest, source , abscisse et ordonnée de la source(5 pour bordure du cadre), opération copy--------- BitBlt(Bitmap->Canvas->Handle, 0, 0, Bitmap->Width, Bitmap->Height, ScreenSrc, Form1->Left+Form1->Image1->Left+5, Form1->Top+46, SRCCOPY); //pointer sur imprimante TPrinter *Impr = Printer(); Impr->Orientation=poLandscape; //mode paysage if(Form1->PrntDial->Execute()) { Impr->BeginDoc(); // Rect de l'imprimante(marge gauche, marge haute, largeur imprimante - marge droite, hauteur imprimante - marge basse); TRect Dest=Rect(300,500,Bitmap->Width*9, Bitmap->Height*9); // Rect de la source(gauche, haut, largeur, hauteur); TRect Sour=Rect(0, 0,Bitmap->Width,Bitmap->Width); //définition de ce qu'il va être enregistré Impr->Canvas->CopyRect(Dest,Bitmap->Canvas,Sour); Impr->EndDoc(); }