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

Messages postés
37
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
26 avril 2011
- - Dernière réponse : cs_LaNono
Messages postés
37
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
26 avril 2011
- 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

Meilleure réponse
Messages postés
37
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
26 avril 2011
1
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 126 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_LaNono
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
11
0
Merci
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
Messages postés
37
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
26 avril 2011
1
0
Merci
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
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
11
0
Merci
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
Messages postés
37
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
26 avril 2011
1
0
Merci
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
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
11
0
Merci
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
Messages postés
37
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
26 avril 2011
1
0
Merci
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
Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
0
Merci
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
Messages postés
4278
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
aprés l'assignation à printerIndex essaye Printer.Refresh.

________________________________________________________
Commenter la réponse de f0xi