IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Forcer l'mpression en noir et blanc sur une imprimante couleur


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti
    Avatar de Pascal Fonteneau
    Profil pro
    gérant
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : gérant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Points : 352
    Points
    352
    Par défaut Forcer l'mpression en noir et blanc sur une imprimante couleur
    Bonjour
    Je recherche désespérement comment recupérér la propriété couleur ou noir et blanc que l'utilisateur a choisi dans ses options d'impression. Cette Propriété n'est pas disponile directement dans le TPrinter, il faut passer par l'interogation du device. Et là je seche !
    voici mon extrait de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      Printer.GetPrinter(Device, Driver, Port,hDevMode);
      Globallock(hDevMode);
      showmessage(IntTostr(DevMode^.dmColor)); // devrait renvoyer 1 ou 2
                                                                   // chez moi renvoi 23888
      // tentative d'ecriture en dur pour tester mais je reste toujour s en couleur
       DevMode^.dmColor := 1;
     
      Printer.SetPrinter(Device, Driver, Port, hDevMode);
      GlobalUnlock(hDevMode);
    J'ai besoin d'un peu d'aide. Merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    tu n'aurais pas oublié de récupérer le pointeur pDevMode qui est un PDeviceMode fourni par GlobalLock selon le Handle hDevmode ?

    Dans ton cas pDevMode prend une valeur quelqueconque, tu as même de la chance de pouvoir lire et surtout y écrire alors que tu n'as pas assigné d'adresse mémoire !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    var
      Device, Driver, Port: array[0..255] of Char;
      hDevMode: THandle;
      pDevMode: PDeviceMode;
    begin
       Printer.GetPrinter(Device, Driver, Port, hDevMode);
     
      pDevMode := GlobalLock(hDevMode); // System Handle to Pointer 
      if Assigned(pDevMode) then
      begin
        try
          pDevMode^.dmColor := 1;
          Printer.SetPrinter(Device, Driver, Port, hDevMode);
        finally
          GlobalUnlock(hDevMode);
        end;
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Avatar de Pascal Fonteneau
    Profil pro
    gérant
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : gérant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Points : 352
    Points
    352
    Par défaut Merci ShaiLeTroll
    RE
    J'ai fait une fausse manip lors de la recopie de mon source. J'avais bien mis

    pDevMode := GlobalLock(hDevMode); // System Handle to Pointer

    le problème ne viens donc pas de là. Je pense que SetPrinter ne fait pas son boulot.

    j'ai fait un second test :

    J'ai fais une copie de l'unité printers et ajouter une proprieté 'color' en me basant sur ce que faisait le code pour l'orientation. Ca compile impec mais toujours impossible de passer en noir et blanc. Dmcolor est pourtant bien valué à 1 avec ma modif !

Discussions similaires

  1. [Java3D] Noir et blanc sur Mac
    Par pip1000 dans le forum 3D
    Réponses: 0
    Dernier message: 10/03/2011, 19h41
  2. Ajout de bruit blanc sur une bande definie
    Par Uno48 dans le forum Mathématiques
    Réponses: 3
    Dernier message: 28/03/2009, 14h27
  3. Forcer une impression sur une imprimante donnée
    Par Opo dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/02/2008, 20h44
  4. Forcer l'impression sur une imprimante
    Par Poussy-Puce dans le forum ASP
    Réponses: 1
    Dernier message: 21/11/2006, 00h27
  5. Forcer l'impression en noir et blanc en VBA Access
    Par WyLLoU dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo