Impression sur imprimantes couleur et noir/blanc [Résolu]

cs_LaNono 37 Messages postés mardi 30 septembre 2008Date d'inscription 26 avril 2011 Dernière intervention - 19 avril 2011 à 08:41 - Dernière réponse : cs_LaNono 37 Messages postés mardi 30 septembre 2008Date d'inscription 26 avril 2011 Dernière intervention
- 26 avril 2011 à 09:13
Bonjour tout le monde,

J'utilise Delphi 6 pour imprimer différents documents. et j'ai découvert un problème un peu bizzare que je n'arrive pas à résoudre. J'ai reproduis ce problème sur un petit projet tout simple.


J'ai une imprimante physique qui est installée deux fois sur mon serveur.
- 1 fois pour une impression couleur (PRINTER_NTM_COLOR)
- 1 fois pour une impression noir/Blanc. (PRINTER_NTM_NB)

Ces imprimantes sont partagées. ce qui fait que j'ai les imprimantes suivantes sur mes postes clients:
- \\MON_SERVEUR\PRINTER_NTM_COLOR
- \\MON_SERVEUR\PRINTER_NTM_NB

La configuration des imprimantes semble correcte. Si j'imprime un document depuis Word, il sort en couleur sur l'imprimante couleur et en noir/blanc sur l'imprimante noir/blanc.

Jusque là, pas de problème.

J'ai la petite application de test suivante :


procedure TForm1.Button1Click(Sender: TObject);
begin
     //Impression d'un texte en rouge sur fond blanc
     Printer.BeginDoc;
     Printer.Canvas.Brush.Color:=clWhite;
     Printer.Canvas.FillRect(Printer.Canvas.ClipRect);
     Printer.Canvas.Brush.Style:=bsSolid;
     Printer.Canvas.Font.Color:=clRed;
     Printer.Canvas.Font.Size:=20;
     Printer.Canvas.TextRect(Rect(200,200,Printer.PageWidth-200,Printer.PageHeight-200),
                             200, 200, 'Test d''impression DELPHI');
     Printer.Canvas.TextRect(Rect(200,1000,Printer.PageWidth-200,Printer.PageHeight-1000),
                             200, 1000, Label1.Caption);
     Printer.EndDoc;

end;

procedure TForm1.FormShow(Sender: TObject);
begin
     //Printer.PrinterIndex := 4  // Color
     //Printer.PrinterIndex := 5 // Noir/Blanc
     Printer.PrinterIndex:=4;
     Label1.Caption:=Printer.Printers[Printer.PrinterIndex]; //Nom de l'imprimante
     Printer.Title:='TEST '+Label1.Caption;
end;



Si j'imprime un petit texte via le code que j'ai mis sur mon premier post, donc vraiment une impression tout ce qu'il y a de plus basic, (du texte rouge sur une page blanche) j'ai le problème suivant :
- Sur l'imprimante noir/blanc --> impression en noir/blanc --> OK
- Sur l'imprimante couleur --> impression en noir/blanc --> Pas OK

Je ne comprend vraiment pas pourquoi mon impression sur l'imprimante couleur ne m'imprime pas en couleur.

Il semble que la cohabitation des imprimantes pose problème mais je ne vois pas où

Merci d'avance
Afficher la suite 

9 réponses

Répondre au sujet
cs_LaNono 37 Messages postés mardi 30 septembre 2008Date d'inscription 26 avril 2011 Dernière intervention - 26 avril 2011 à 09:13
+3
Utile
Bonjour tout le monde,

Merci de votre aide et de vos réponses. Après plusieurs essais et grâce à beaucoup d'aide, j'ai trouvé une solution qui fonctionne. La voici :
var
  FDevice,FDriver,FPort: array [0..255] of Char;
  DeviceMode: THandle;
//....
    printer.PrinterIndex:=4;
    //*** Force recreate setting from selected printer ***
    Printer.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
    Printer.SetPrinter( FDevice , FDriver, FPort, 0);


Ce code permet de forcer la configuration de l'imprimante.

Merci encore à tous pour votre aide.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_LaNono
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 19 avril 2011 à 12:31
0
Utile
Salut,

Peut-être une piste :

- au lieu de

Printer.Canvas.Font.Color:=clRed; 
Printer.Canvas.Font.Size:=20;


Créer une TFont avec ses principales propriétés renseignées (Name, Height, Color...), et faire :

Printer.Canvas.Font.Assign(MaFont);


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
Commenter la réponse de Caribensila
cs_LaNono 37 Messages postés mardi 30 septembre 2008Date d'inscription 26 avril 2011 Dernière intervention - 19 avril 2011 à 14:01
0
Utile
Salut Caribensila, Merci de ta réponse,

j'ai essayé de faire ce que tu m'as conseillé :

procedure TForm1.Button1Click(Sender: TObject);

Var
   NewFont : TFont;
begin

     NewFont:=TFont.Create;
     NewFont.Name:='Arial';
     NewFont.Color:=clRed;
     NewFont.Size:=20;

     Printer.BeginDoc;
     Printer.Canvas.Brush.Color:=clWhite;
     Printer.Canvas.FillRect(Printer.Canvas.ClipRect);
     Printer.Canvas.Brush.Style:=bsSolid;
     Printer.Canvas.Font.Assign(NewFont);
     Printer.Canvas.TextRect(Rect(200,200,Printer.PageWidth-200,Printer.PageHeight-200),
                             200, 200, 'Test d''impression DELPHI');
     Printer.Canvas.TextRect(Rect(200,1000,Printer.PageWidth-200,Printer.PageHeight-1000),
                             200, 1000, Label1.Caption);
     Printer.EndDoc;
     NewFont.Free;

end;


Pour info, une image complète s'imprime aussi en noir/blanc, ça n'est pas seulement le texte.

Bizarre n'est-ce pas?
Commenter la réponse de cs_LaNono
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 19 avril 2011 à 15:07
0
Utile
En fait, il semble que Word reconnaisse les options d'impression de l'imprimante et pas l'application Delphi...

Why ?


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
Commenter la réponse de Caribensila
cs_LaNono 37 Messages postés mardi 30 septembre 2008Date d'inscription 26 avril 2011 Dernière intervention - 19 avril 2011 à 15:10
0
Utile
Ce qui est étonnant, c'est que le problème ne se produit que si j'ai les deux imprimantes. si je n'ai que l'imprimante couleur d'installée, l'impression se fait en couleur. Si je n'ai que l'imprimante noir/blanc, l'impression se fait en noir/blanc. C'est la cohabitation des deux imprimantes qui pose problème. mais c'est vraiment drôle.
Commenter la réponse de cs_LaNono
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 19 avril 2011 à 15:25
0
Utile
Les 2 imprimantes sont bien présentes dans la TStrings Printer.Printers ?

Essaie (avec le bon indice) :

Printer.Printers[].BeginDoc;
Printer.Printers[].Canvas...   , etc...

_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
Commenter la réponse de Caribensila
cs_LaNono 37 Messages postés mardi 30 septembre 2008Date d'inscription 26 avril 2011 Dernière intervention - 19 avril 2011 à 15:40
0
Utile
Oui, elles sont présentent dans la TStrings.
Printer.Printers[4]  --> retourne \\MON_SERVEUR\PRINTER_NTM_COLOR
Printer.Printers[5]  --> retourne \\MON_SERVEUR\PRINTER_NTM_NB


Je ne peux pas faire :


Printer.Printers[].BeginDoc;
Printer.Printers[].Canvas...   , etc...


Printer.Printers[] étant un TStrings, et non une liste de TPrinter.

Merci encore de ton aide
Commenter la réponse de cs_LaNono
jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention - 22 avril 2011 à 16:18
0
Utile
Bonjour LaNono,

As tu essayé, en fixant comme imprimante par défaut dans windows la couleur et de mettre dans delphi PrinterIndex=-1;

Puis la même manip avec la noir & blanc.

Si cela fonctionne, tu pourras faire avec les deux commandes un truc un peu comme ça :

//si Impression couleur
SetPrinter = "\\MON_SERVEUR\PRINTER_NTM_COLOR"
// sinon
SetPrinter = "\\MON_SERVEUR\PRINTER_NTM_NB"

PrinterIndex = -1;

Jean
Commenter la réponse de jderf
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 24 avril 2011 à 04:22
0
Utile
aprés l'assignation à printerIndex essaye Printer.Refresh.

________________________________________________________
Commenter la réponse de f0xi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.