Calage imprimante Matricielle

cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 - 30 juil. 2007 à 12:38
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 - 7 août 2007 à 15:01
Bonjour à Tous,

  Je vois déja les rires de certains qui vont dire mais c'est quoi ce matérielle de Dinausaure.:-D

Bref il ya quelques temps j'aurais moi aussi rigolé mais j'avaoue que cela commencent à me prendre sérieusement le chou,
et je ne vois rien nul part.

Bon avant de continuer à pleurer je vais poser m question.
J'ai une impriamante matricielle que je ne peux remplacer par une imprimante A4.
Suite à une demande spécifique, jai développé le source suivant.

function Millimetres2PixelsX(Millims: integer): integer;

 var
  XPixelsParPouce  :integer;
begin
XPixelsParPouce := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
 result := Trunc(Millims / (25.4 / XPixelsParPouce));
end;

function Millimetres2PixelsY(Millims: integer): integer;
var
YPixelsParPouce :integer;
begin
YPixelsParPouce := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
 result := Trunc(Millims / (25.4 / YPixelsParPouce));
end;
function NomImprimableHorizPixelsX: integer;
begin
 result := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
end;
function NomImprimableVertiPixelsY: integer;
begin
 result := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
end;

procedure TForm2.Button1Click(Sender: TObject);
var
 S,expRS ,expadr1,expadr2,expCP,expLocal: String;
 S1,RS ,destadr1,destadr2,destCP,destLocal: String;
  I: Integer;
begin
//for I := 0 to 2 do

 With Printer do
  begin
  copies:=2;
  //orientation:=poLandscape;
   {Démarrage de l'impression}
   BeginDoc;
  

   Canvas.font.Size := 12;
  
   Canvas.TextOut(2000, 200, 'RS');
   canvas.TextOut(2000,275,'ADR1');
   canvas.TextOut(6400,1450,'adr2');
   canvas.TextOut(2000,350,'CP');
   canvas.TextOut(2200,350,'LOCALITE');
   canvas.TextOut(3800,450,'CPcl');
   Printer.Canvas.TextOut(
    Millimetres2PixelsX(85) - NomImprimableHorizPixelsX,
    Millimetres2PixelsY(59) - NomImprimableVertiPixelsY,
    'DEST');
   Printer.Canvas.TextOut(
    Millimetres2PixelsX(85) - NomImprimableHorizPixelsX,
    Millimetres2PixelsY(65) - NomImprimableVertiPixelsY,
    'ADR1');
  Printer.Canvas.TextOut(
    Millimetres2PixelsX(100) - NomImprimableHorizPixelsX,
    Millimetres2PixelsY(71) - NomImprimableVertiPixelsY,
    '10500');
  Printer.Canvas.TextOut(
    Millimetres2PixelsX(135) - NomImprimableHorizPixelsX,
    Millimetres2PixelsY(71) - NomImprimableVertiPixelsY,
    'BRIENNE LE CHATEAU');
Printer.Canvas.TextOut(
    Millimetres2PixelsX(53) ,
    Millimetres2PixelsY(65) ,
    'XX');

 

                               newpage;
END;
END

Le problème me direz vous?
je n'arrive pas à caler cette imprimante
j'ai beau faire démarer imprimante et télécopieurs-->fichier-->propriété du serveur-->formulaires

rienà faire 1ère feuille =OK puis seconde se décale etc....
j'ai déja défini enlever remis des marges, rien à faire...

Ma question?
quelqu'un a il été déja confronté à ce problème (internet et gogole ne me donne rien)
sinon comment faire pourque ce soit le programme qui détermine la taille du papier et pas windows.
mon matériel c'est un lexmark 2391 plus.
la taille de mon formulaire hauteur 21 largeur 29,6 (pacompliqué) mais le new page me décle de 21 cm après
la dernière ligne écrite.
Donc j'ai refait un nouveau formulaire par  imprimante et télécopieurs-->fichier-->propriété du serveur-->formulaires

et j'ai fait 10,5 29,6  mais catastrophe cela ne me donne rien.

Bon si quelqu'un a un tuyeau une idée je vous remercie par avance.

Autre question, pourquoi windows prends le pas sur les propriétés de l'imprimante?

Je vous en remercie par avance.
couf

15 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
30 juil. 2007 à 16:26
Bonjour

Une petite remarque en passant, je vois le BeginDoc mais pas le EndDoc.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
30 juil. 2007 à 16:31
Sinon, pas mal de sujets à ce propos dans les archives des groupes google (ici)

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
30 juil. 2007 à 18:14
Bonjour [auteurdetail.aspx?ID=323345 WhiteHippo]
non c'est mon copier coller qui est mauvais dans le programme j'ai bien un enddoc
cela fonctionne toujours pas je vas voir les archives que tu m'as proposé merci quand même
couf
0
Oniria Messages postés 292 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 18 décembre 2014 3
30 juil. 2007 à 20:54
Bonjour,

Pour t'aider, il faudrait que tu regardes tes fonctions de convertion : NomImprimableVertiPixelsY et Millimetres2PixelsY entre la première page et la deuxième page. Je me demande juste si il n'y aurait pas un probléme avec la fonction GETDEVICECAPS. parce que si on réfléchit un peu, j'ai l'impression que le PHYSICALOFFSETX se référe à la première page. C'est pour ca que je te demande de comparer les résultats de la première et de la deuxième page.

Si c'est ca, tu peux enregistrer les offsets de même que les valeurs constante de convertion dans des variables de manière à ne faire qu'un seul appel aux infos de l'imprimante. Si je ne me trompe pas, l'imprimante ne va pas changer ces caractéristique en dinamique.

J'espére que j'ai pu t'aider un peu...

Bon courage

Oniria
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
2 août 2007 à 12:24
Salut,

pour Oniria, j'ai essayé ta méthode, mais cela reste toujours pareil,

le problème viens bien du saut de page, qui me décale tout à chaque fois, d'une page -1 ligne mais à partir de la dernière ligne.
donc il faut que je trouve le moyen, à chaque saut de page de commencez l'impression une ligne en dessous.j'ai vu une procédure newline mais je vais regarder comment elle marche.
couf
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
2 août 2007 à 17:43
RE,

par contre je suis embetté, je n'arrive pas à faire un carriage return, ou un Line Feed, avec Printer
si un de vous à un conseil s'il vous plait.

couf
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
3 août 2007 à 14:22
Bonjour,
Envoyer un fichier de commandes à l'imprimante ...
Tu peux même imprimer avec des commandes .

Dom
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
3 août 2007 à 15:47
Exemple d'utilisation
procedure TMainForm.ImprimerClick(Sender: TObject);
var Line:integer; PrintText:System.Text;
begin
        Printer.Title:='Post-it';
        AssignPrn(PrintText);
        Rewrite(PrintText);
        Printer.Canvas.Font:=Memo.Font;
        for line:=0 to memo.Lines.Count-1 do
            Writeln(PrintText,Memo.Lines[line]);
        closefile(PrintText);
end;

en remplaçant le memo.lines[line] par ce que tuveux envoyer à l'imprimante
Un crLF c'est #13#10 ou #10#13 ....

Dom
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
3 août 2007 à 17:00
Salut Domi,

  Cela m'a l'air pas mal je m'en vais essayer car je suis toujours en galère.
Je parcours beaucoup Gogole, et c'est fou le nombre de personne qui ont eu des problèmes avec ce type d'imprimante mais on
a pas beaucoup de solution.
Vais devoir retourner sous Pascal en MS DOS?

couf
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
6 août 2007 à 15:26
Salut,

  Une dernière question et puis j'arrète de vous embéter tous d'abord merci encore poutes vos suggestiosns.

Diminique, j'ai rajouter ceci à mon code.

AssignPrn(PrintText);
        Rewrite(PrintText);
        Writeln(PrintText,#10#13);
        writeln(printtext,'TEST');// pour veérifier ou cefais l'écriture {a gauche de la page}
        closefile(PrintText)

Cela me fais au départ un saut de ligne, puis tout de suite après un saut de page
causé par ceci

Canvas.TextOut(2000, 200, 'RS');
   canvas.TextOut(2000,275,'ADR1');
   canvas.TextOut(6400,1450,'adr2');
   canvas.TextOut(2000,350,'CP');
   canvas.TextOut(2200,350,'LOCALITE');
   canvas.TextOut(3800,450,'CPcl');

Normal si on regarde bien le code il est obligé de faire un saut de page,
pourtant la solution que tu me donnes semble la bonne.
As ton avis, est il possible de formater le formulaire avec la commande printext ou aurais tu une astuce
pour formater le formulaire, sans employer canvas.txtout, qui de toute évidence, ne me conviens pas
Merci d'avance
couf
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
6 août 2007 à 16:14
Oui, il est possible d'imprimer avec un fichier text.
Tu peux écrire dans le fichier texte des tabs et d'autres commandes (dont je ne me souviens plus) afin de positionner ton texte.

Ce que tu as écris
Writeln(PrintText,#10#13);
        writeln(printtext,'TEST');//

fait un saut de ligne (#13#10) puis écrit TEST en début de ligne  ....
Dom
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
6 août 2007 à 18:53
Bonsoir à Tous,

  Je remercie encore tous ceux qui m'ont aidé, grace à eux j'ai put explorer d'autres voies.
A l'heure où j'écris ces quelques lignes , je dirais que je c'est une victoire mitigée.

  Je réussis à imprimer  avec le source que j'ai fait, mais malheureusement, j'ai du utiliser une imprimante générique tex only
pourquoi mon driver ne marche pas je n'en sais rien....
Le driver de la lexmark mange à tous les coups une ligne
le driver générique text non!
Il faut que j'utilise new page pour avoir un autre page et Writeln(PrintText,#10#13); ne saute pas de ligne mais une page directement.
avec générique text le enddoc; suffit à changer de page.

Le seul inconvénient à utiliser un générique text only , je n'arrive pas (ou pas encoreà faire du gras, ni à faire la taille de la police que je veux)
mais si je cherche je pense que je vais trouver.
Merci en tous cas, et si quelqu'un sait comment gérer ce problème de driver je suis toujours preneur.

couf
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
7 août 2007 à 08:08
As-tu essayé #13#10 au lieu de #10#13 ?
Dom
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
7 août 2007 à 14:51
Salut Dom,

 Non cela donne le même résultât

couf
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
7 août 2007 à 15:01
juste #13
ou juste #10 ?

Dom
0
Rejoignez-nous