Impression bitmap + texte (c++ builder 5)

Signaler
Messages postés
3
Date d'inscription
lundi 4 décembre 2000
Statut
Membre
Dernière intervention
22 septembre 2009
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
Bonjour à tous,

Je cherche à réaliser une impression particulière avec C++Builder 5.

Je dois sur la feuille A4 qui sort de l'imprimante imprimer quelques infos texte dans la zone la plus en haut de la feuille, une image bitmap au centre ( qui prendra le + de place ) et peut être quelques infos texte en bas de la page.

J'ai parcouru plusieurs tutoriels mais sans vraiment tout à fait arriver à mes fins.

Mon problème est l'insertion du bitmap à la bonne taille et de facon complète. Donc évitons de parler de l'impression du texte, mon problème est ailleurs.

Dans mon code j'ai tenté d'utiliser plusieurs méthodes sur le Canvas de l'imprimante.

Ma 1ère solution :
{

Graphics::TBitmap* Bitmap = new Graphics::TBitmap();

Bitmap->LoadFromFile("C:\\TestCCQ.bmp");

Printer()->Orientation = poLandscape;

Printer()->BeginDoc();

Printer()->Canvas->CopyRect(Printer()->Canvas->ClipRect,Bitmap->Canvas,Bitmap->Canvas->ClipRect);

Printer()->EndDoc();

}

Ce code lance une impression de mon Bitmap en paysage sur tout la partie imprimable de la feuille.

Mon bitmap est donc étiré si la partie imprimable sur l'imprimante est supérieure au bitmap.

Mon bitmap est donc rétréci si la partie impribale sur l'imprimante est inférieure au bitmap.

Cette solution ne me convient pas car je veux pouvoir imprimer du texte sur la feuille en dessus et en dessous de limage.

Ma 2ème solution :

{

Graphics::TBitmap* Bitmap = new Graphics::TBitmap();

Bitmap->LoadFromFile("C:\\TestCCQ.bmp");

Printer()->Orientation = poLandscape;

Printer()->BeginDoc();

Printer()->Canvas->Draw(0,0,Bitmap);;

Printer()->EndDoc();

}

Ce code lance une impression de mon Bitmap en paysage sur une toute petite partie imprimable de la feuille.

Mon Bitmap est imprimé en entier mais l'image sur la feuille est réduite.

Sur les 21cm x 29.7cm de la feuille A4, mon image prend environ 4cm x 6cm

Cette solution me convient un peu mieux mais l'image est encore trop petite.

A ce niveau la il ya peut etre quelque chose à faire pour augmenter la taille ou déplacer l'image mais je n'ai pas réussi.

Les zéros en parametre de la fonction Draw sont les coordonées de depart de l'impression de mon bitmap.

(0,0) imprimera tout en haut a gauche , sur les bords de la feuille.

(100,100) imprimera à partir de 100 pixels du bord haut et 100 pixels du bord gauche.


J'ai ensuite essayé d'utiliser cette méthode pour redimensionner le canvas :

{

Bitmap->Canvas->StretchDraw(Printer()->Canvas->ClipRect, Bitmap);

}

Mais en fonction de la position de l'appel à cette méthode dans le code :

la zone imprimable de la feuille est réduite sans que l'image le soit;

ou la zone imprimable de la feuille est au maximum mais le bitmap est aussi etiré de la meme facon aux mêmes proportions donc incomplet.



Voilà je fais appel au savoir de tous ceux qui liront ce message.

Pour récapituler, mon problème est que je suis incapable de dimensionner la taille et la position du mon Bitmap sur le canvas de l'imprimante.

Si quelqu'un sait comment imprimer à sa guise un bitmap redimensionné et positionné sur la feuille A4, en ayant placé au dessus et en dessous de l'image du texte personnalisé , vous m'aideriez beaucoup.

Merci d'avance .

2 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

StretchDraw prend en premier paramètre un rectangle. N'utilises pas le ClipRect du canvas, mais plutôt ton propre rectangle.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Je t'invite à t'inspirer de mon code source, en Win32, sur l'impression des images bitmap en espérant qu'il te sera utile:
IMPRIMEUR-IMAGES-BMP