Impression sur imprimantes couleur et noir/blanc

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

9 réponses

cs_LaNono Messages postés 37 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 avril 2011 1
26 avril 2011 à 09:13
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.
3
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
19 avril 2011 à 12:31
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
0
cs_LaNono Messages postés 37 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 avril 2011 1
19 avril 2011 à 14:01
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?
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
19 avril 2011 à 15:07
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
0

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

Posez votre question
cs_LaNono Messages postés 37 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 avril 2011 1
19 avril 2011 à 15:10
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.
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
19 avril 2011 à 15:25
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
0
cs_LaNono Messages postés 37 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 avril 2011 1
19 avril 2011 à 15:40
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
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
22 avril 2011 à 16:18
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
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
24 avril 2011 à 04:22
aprés l'assignation à printerIndex essaye Printer.Refresh.

________________________________________________________
0
Rejoignez-nous