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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
	}
Pour l'impression : (assez ressemblant)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
    }