Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : impression avec gdi+ [ Mutimédia / Image & Vidéo ] (vivelesquads)

lundi 7 juillet 2008 à 10:45:38 | impression avec gdi+

vivelesquads

Salut à tous,
Je réalise actuellement une application qui permet entre autre de dessiner des graphiques et surtout de les imprimer. Pour cela je vais devoir utiliser le gdi+. Donc je commence par des petits programmes de tests et là les problèmes surviennent tout de suite : l'affichage à l'écran (sur un TImage.canvas) est correct mais sur le Printer.Canvas le texte écrit avec le gdi+ n'est pas au bon endroit(les coordonnées x et y sont beaucoup trop grande !!
Pourquoi? Et comment faire faire pour écrire au bon endroit ?
Merci d'avance !

procedure TForm1.TestImprimeTexte(cv : TCanvas; chaine: string; x, y: integer);
var
  rectf : TGPRectF;
  graphics : TGPGraphics;
  solidBrush : TGPSolidBrush;
  fontFamily: TGPFontFamily;
  gpfont: TGPFont;
  origine : TpointD;
  stringFormat : TGPstringFormat;
  gpFontStyle : TFontStyle;
  gpUnit : TUnit;
  cvTest : TCanvas;
begin
  cvTest := cv;
  cv.font.color := clRed;
  cv.font.size := 12;
  cv.brush.style := bsClear;
  origine := PointD(0,0);
  graphics := TGPGraphics.Create(cv.Handle);
  solidBrush:= TGPSolidBrush.Create(ColorToARGB(cv.font.color));
  fontFamily:= TGPFontFamily.Create('Arial');
  //Style de la font
  gpFontStyle := FontStyleRegular;
  gpUnit := UnitPixel;
  gpfont:= TGPFont.Create(fontFamily, cv.font.size, gpFontStyle , gpUnit);
  stringFormat := TGPstringFormat.create;
  rectf.x := x;
  rectf.y := y;
 graphics.DrawString(chaine, -1, gpFont, MakePoint(rectf.X, rectf.y), stringFormat,  solidBrush);
  cv.textOut(Round(rectf.X), Round(rectf.Y), chaine);
  graphics.Free;
  solidBrush.Free;
  fontFamily.Free;
  gpfont.Free;
end;

 


lundi 7 juillet 2008 à 18:54:43 | Re : impression avec gdi+

Oniria

Bonjour,

Je pense que tu as oublié que l'imprimante n'a pas la même résolution que ton TImage. Je pense qu'il faut que tu fasses des formules de mise à l'échelle pour adapter le CANVAS de l'image et celui de TPrinter.

Oniria

mardi 8 juillet 2008 à 09:07:02 | Re : impression avec gdi+

vivelesquads

Salut et merci d'avoir pris le temps de me répondre,
Effectivement il doit y avoir un problème de résolution. Mais pourquoi l'impression par le le gdi (cv.textOut) est OK alors que celle par le gdi+ (graphics.DrawString) est totalement décalée?
JB

mardi 8 juillet 2008 à 12:42:24 | Re : impression avec gdi+

f0xi

Membre Club Administrateur CodeS-SourceS

tu doit definir les parametres du contexte de dessin via le GPGraphics il me semble, dpi, echelle, mesure, unité etc...




vendredi 11 juillet 2008 à 09:38:06 | Re : impression avec gdi+

vivelesquads

Réponse acceptée !

Salut fOxi, c'est bien ce que tu disais.
En fait il faut faire

graphics := TGPGraphics.Create(cv.Handle);
graphics.setPageUnit(UnitPixel);

Cela permet d'imprimer dans les même condition que le GDI. Car le GDI+ est de base indépendant de la résolution alors que le GDI ne l'est pas




Cette discussion est classé dans : font, gdi, cv, create, rectf


Répondre à ce message

Sujets en rapport avec ce message

Suppression... [ par VB7 ] salut, je voudrai savoir comment supprimer le contenu d'un dossier svp ?Merci d'avance EditBox, petit prob. [ par malandry ] J'ai un texte pas défault dans mon EditBox. J'aimerais que lorsque il 'get' le focus que le curseur ne soit pas au début mais après le texte par défa probs' de taille en Ko :( [ par eedy31 ] j'ai un petit problème : je voit tout parout des prog'ecrit en delphi et qui font moins de 200 Ko et moi,ils font 300 Ko minimum(et je n'ai ecrit que Ajouter par programmation un index secondaire [ par haaltruf ] Je galère pour ajouter un index secondaire en programmant (et non en utilisant le DataBase Desktop) pour pouvoir ensuite trier ma base.La méthode de l Delphi et Java [ par OAL ] Comment puis je interfacer Delphi avec Java (JNI) - Delphi me permet d'interroger une DLL en Pascal mais j'ai besoi de transmettre des résultats à un Problème avec un TStrings... [ par haaltruf ] Je fais toujours chier avec mes index... Mais j'aimerais au démarrage de mon application récupérer les index par la méthode GetIndexNames(LaListe); af Comment utiliser un OCX ? [ par sebastienbro ] J'aimerais savoir comment utiliser un OCX dans Delphi 6 !!Merci raise Exception.Create : gérer les exceptions ? [ par manudel ] Voilà je ne sais pas comment "catcher" une exception.L'exception se déclenche, et à mon avis remonte au niveau le plus haut, en cherchant un gestionna création de vue avec access ? [ par tgomas ] je bosse sur une appli interfacée avec access, j'ai une requête qui crée une vue (CREATE VIEW...), mais à l'éxecution j'ai l'erreur 'Erreur de syntaxe Prob avec Font.Style [ par MasterNKZ ] Salut tout le monde,comment savoir la valeur de Font.Stylepar exemple je voudrait savoir si fsbold est a vrai ou faux (ou fsunderline,...).j'arrive a


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,22 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.