cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 2011
-
18 juil. 2006 à 17:27
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 2013
-
19 juil. 2006 à 15:15
Bonjour à tous,
Je me suis construit un espece d'aperçu avant impression sur un tBitmap (de même taille que le résultat final sur l'imprimante: 1 pixel=1 ppp) ou il est possible de changer la taille des textes.
Selon cette taille, j'utilise:
http://delphi.developpez.com/faq/?pa...imensionstexte Pour obtenir la taille en pixels et centrer le texte selon les nouvelles informations.
Seulement, lorsque j'imprime ces élements à l'aide du canvas de l'imprimante, le texte (qui a gardé ses même propriétés) apparait plus gros.
En clair, quand au pré-rendu, mon texte fait la même taille que d'autres element (images, traits, ...), il apparait beaucoup plus gros à l'impression !
Par exemple, si je fait (avec la même font, bien entendu):
monTBitmap32.Textout(20,20,'TEST');
sur un tBitmap32 de 600*400, le résultat prendra moins de place que:
Printer.canevas.Textout(20,20,'TEST');
imprimé sur une étiquette de 75*50 en 203 dpi (donc 600*400 pixels).
<!-- / message --><!-- sig -->
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 19 juil. 2006 à 11:15
Bonjour David,
Ok pour 600p = 75mm en 203dpi.
En fait, on ne fait pas un StretchDraw du texte, mais on écrit sur le bitmap en tenant compte de la résolution imprimante.
Pour récupérer le nb de pixels/pouce de l'imprimante :
P := GetDeviceCaps(Printer.handle, LOGPIXELSX);
Dans ta procedure de texte sur le bitmap :
with mybitmap do
begin
// on donne à la fonte écran la résolution de l'imprimante
Canvas.Font.PixelsPerInch := P;
Canvas.TextOut........
end;
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 18 juil. 2006 à 19:10
Salut nitrique.
Ce n'est pas pcq tu imprimes 600 pixels sur une largeur de 75mm que tu travailles en 203 dpi !
En fait, tu travailles avec la résolution de ton imprimante (impri bureau: généralement 300 ou 600 dpi). Donc une ligne de 600 pixels en 300dpi 2" imprimé (soit 2 * 25,4 50,8 mm) et la même ligne en 600dpi = 1".
Si je fais Printer.Canvas.TextOut(300,300, 'TEST') : avec une résolution impri de 300 dpi, j'aurai une marge de 1", avec une résolution de 600dpi, une marge de 1/2", mais la taille de mon texte reste identique pcq la fonte s'adapte à la résolution imprimante.
Pour faire un aperçu avant impression, il te faut dessiner dans un canvas qui ait la taille en pixels de la page à imprimer compte tenu de la résolution impri employée.
Après, tu fais un StretchDraw de ce bitmap en conservant les proportions.
Excellent tutoriel : http://delphi.developpez.com/cours/?dom=IMPRESSION L'aperçu avant impression se fait avec un MetaFile dessiné dans un PaintBox, ce qui est beaucoup plus net à l'écran qu'un TBitmap.
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 20111 19 juil. 2006 à 09:27
Bonjour Thierry,
Mon imprimante est bien en 203 dpi (c'est une imprimante étiquettes).
Donc, je ne pense pas me tromper en disant que 600 pixels=75mm sur papier.
Ce qui est à l'ecran doit être, par consequent, la même chose qu'au rendu, nan ?
Je vais étudier le lien que tu m'as passé, merci.
Si j'utilise un tBitmap32 (composants graphics32), c'est pour pouvoir utiliser des calques et les déplacer/redimensionner/supprimer à l'ecran.
Peux tu STP, me donner un rapide exemple pour afficher du texte avec StretchDraw ?
David, à VERSAILLES
Vous n’avez pas trouvé la réponse que vous recherchez ?
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 19 juil. 2006 à 13:06
Désolé David, mais je ne comprends pas ton problème : "lorsque je recharge mon tBitmap, il me divise à chaque fois la taille du texte par 2".
Peux-tu être plus explicite et montrer quelques lignes de code ?
Remarque : tu utilises un TBitmap32, je connais graphics32 de nom, mais je n'ai jamais utilisé.
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 19 juil. 2006 à 14:46
Font.Size = 28
Font.PixelsPerInch = 203
d'où Font.Size devient : 28 * (96/203) = 13
Quand tu sauvegardes ta Font, tu sauvegardes size = 13
D'où quand tu récupères et que tu refais un PixelsPerInch, cela donne :
size = 13 * (96/203) = 6.
Il te faut donc sauvegarder Font.Size dans la résolution écran (28)
Ou alors tu emploies:
Canvas.Assign(elt.police)
Canvas. Font.PixelsPerInch = ...
ce qui ne modifie pas les propriétés de elt.police
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 20111 19 juil. 2006 à 15:04
Ok, j'ai réussi à faire fonctionner le truc d'une autre manière:
Je ne modifie lePixelsPerInch que lorsque je construit mon texte sur le canvas de l'imprimante... Sur mon tImageView32, je laisse tout par défaut.
Ca marche assez bien et c'est fidèle... ...Si j'imprime sur une autre imprimante qui est en 600 dpi, ça marche aussi.
Je garde néanmoins tes solutions sous le coude au cas ou je m'aperçoit d'un cas ou ça ne marche pas.
Je te remercie une fois encore (ça fait mille et une, hi).