Imprimer sous Borland C++ Builder

Imprimer sous Borland C++ Builder - C++ - Programmation

Marsh Posté le 28-01-2005 à 14:52:14    

Bonjour à tous,
 
J'ai un sérieu problème concernant la mise en page pour l'imprimer un "document".
 
Dans ma fenêtre, j'ai un graphique et à côté des données (indépendant du graphique).
 
Il faut que je récupère les données et la courbe. Je fasse la mise en forme et je dois l'imprimer. Le problème est que je ne sais pas par où ni par quoi commencer.
 
J'espère que l'un d'entre vous pourra m'aider.
 
Merci d'avance :)

Reply

Marsh Posté le 28-01-2005 à 14:52:14   

Reply

Marsh Posté le 28-01-2005 à 17:15:58    

Je te files un p'tit bout de code brut. Ca imprime une page avec des caractères en "Courier New" et en "Arial" plus une zoulie elipse. Le principe de l'impression est de manipuler le "Canvas" de l'imprimante comme celui d'un écran - avec les même fonction d'affichage et de dessin. Attention aux différents modèles de printeuses (résolution, N&B / couleur, ...).
Ce bout de code devrait tourner sans problème mais si tes impressions sont un minimum complexes, ça va pas être du gâteau, ne serait-ce que pour la mise à l'échelle en fonction de la résolution de la printeuse. Il va falloir trouver des outils ou t'en faire.

Code :
  1. TPrinter *Prntr = Printer();
  2. Prntr->Title = "Essai impression";
  3. Prntr->BeginDoc();
  4. Prntr->Canvas->Font->Name = "Courier New";
  5. Prntr->Canvas->Font->Size = 18;
  6. Prntr->Canvas->TextOut(1000, 1000, "ESSAI impression (Courier)" );
  7. Prntr->Canvas->Font->Name = "Arial";
  8. Prntr->Canvas->Font->Size = 12;
  9. Prntr->Canvas->TextOut(1000, 1500, "En Arial 12 pts" );
  10. Prntr->Canvas->Pen->Style = psSolid;
  11. Prntr->Canvas->Pen->Color = clBlack;
  12. Prntr->Canvas->Ellipse(500, 500, 2000, 3000);
  13. Prntr->EndDoc();

Reply

Marsh Posté le 28-01-2005 à 18:07:55    

Merci pour la piste. J'espère y arriver.

Reply

Marsh Posté le 07-02-2005 à 17:54:45    

Bonjour,
 
J'ai suivi les pistes données ds ce topic, mais je n'arrive pas à faire ce que je veux. Je voudrais permettre à l'utilisateur de choisir son imprimante (C'est pas vraiment obligatoire), je voudrais forcer l'impression en mode paysage, forcer la taille des cellules à 10, la source étant un fichier texte.
 

Code :
  1. TPrinter * Prntr = Printer();
  2. Prntr->Title = "Impression fichier coda";
  3. Prntr->Orientation=poLandscape;
  4. Prntr->BeginDoc();
  5. //Quoi mettre ?
  6. Prntr->EndDoc();


 
Merci de votre aide

Reply

Marsh Posté le 08-02-2005 à 15:25:37    

up

Reply

Marsh Posté le 10-02-2005 à 12:28:06    

J'ai crée un trichedit non dynamique, ca fonctionne bien, et je sais imprimer en mode paysage.
 
maintenant mon problème, c'est que le richedit, ne gère pas les blancs comme un caractère.  ce qui fait que mes lignes ne sont plus alignées du tout. ce qui est très génant,
 
Si vous avez une idée, merci
 
Pourtant le pitch est bien mis sur fixe :S
 

Code :
  1. TPrinter * Prntr = Printer();
  2. Prntr->Orientation = poLandscape;
  3. RichEdit1->Clear();
  4. RichEdit1->Font->Pitch=fpFixed;
  5. RichEdit1->PlainText = false;
  6. RichEdit1->Lines->LoadFromFile(Edit8->Text.c_str());
  7. RichEdit1->Print("Impression" );


 
Ce que ca donne en image
 
Le fichier d'origine avec la mise en page que je souhaite garder
http://www.leveilleur.net/chris/pitch1.jpg
 
Ce que le loadfile me donne dans un richedit
http://www.leveilleur.net/chris/pitch2.jpg
 
merci

Reply

Marsh Posté le 11-02-2005 à 09:00:21    

Ton problème principal est la police de caractères utilisée : elle est proportionnelle (le 'l' prend moins de place que le 'W'). Tu dois choisir une police non-proportionnelle (Courrier, Courrier New, Lucida Console, Fixedsys...). Quant à la propriété des TFont "Pitch = fpFixed / fpVariable", oublie.
Si vous affectez la valeur fpVariable à la propriété Pitch d'une fonte de pas fixe, ou la valeur fpFixed à une fonte de pas variable, le système détermine ce qu'il considère correspondre le mieux à toutes les caractéristiques spécifiées de la fonte. Cela peut ne rien changer à la fonte, ou amener le système à utiliser une fonte différente ayant le pas approprié. Si, par exemple, vous utilisez la valeur fpFixed pour le pas de la fonte Serif (fonte de pas variable), l'affichage se fera avec la fonte Courrier.

Reply

Marsh Posté le 24-03-2005 à 10:37:31    

Le Veilleur a écrit :

Bonjour,
 
J'ai suivi les pistes données ds ce topic, mais je n'arrive pas à faire ce que je veux. Je voudrais permettre à l'utilisateur de choisir son imprimante (C'est pas vraiment obligatoire), je voudrais forcer l'impression en mode paysage, forcer la taille des cellules à 10, la source étant un fichier texte.
 

Code :
  1. TPrinter * Prntr = Printer();
  2. Prntr->Title = "Impression fichier coda";
  3. Prntr->Orientation=poLandscape;
  4. Prntr->BeginDoc();
  5. //Quoi mettre ?
  6. Prntr->EndDoc();


 
Merci de votre aide


 
Il faut que tu utilise l'objet PrintDialog.
 
Donc tu prend ton objet, tu le met ou tu veux dans ta fenêtre puis tu code un bouton du style "Imprimer" et tu va mettre ceci:

Code :
  1. if(PrintDiag->Execute()) // PrintDiag est le nom de l'objet
  2. {
  3.   // ... Ton code pour l'impression ...
  4. }


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed