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

Langage Delphi Discussion :

"Imprimante sélectionnée incorrecte" sur une imprimante


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 93
    Points
    93
    Par défaut "Imprimante sélectionnée incorrecte" sur une imprimante
    Bonjour tout le monde,

    Notre logiciel permet d'imprimer des rapports au format papier. Depuis peu, un de nos client rencontre un problème lorsqu'il essaie d'imprimer sur une de ses imprimantes. Après quelques essais. nous avons pu reproduire l'erreur dans un petit programme de test que voici :

    Je commence par sélectionner toutes les imprimantes installées sur le poste de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ComboBox1.Clear;
    For I:=0 To Printer.Printers.Count-1 Do
    ComboBox1.Items.Add(Printer.Printers[I]);
    Lorsque le client sélectionne une imprimante, je fais ensuite la liste des sources de papier disponibles de la manière suivante :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    procedure TForm1.ComboBox1Change(Sender: TObject);
     
    Type
      TBinName      = array [0..23] of Char;
      TBinNameArray = array [1..High(Integer) div SizeOf(TBinName)] of TBinName;
      PBinnameArray = ^TBinNameArray;
      TBinArray     = array [1..High(Integer) div SizeOf(Word)] of Word;
      PBinArray     = ^TBinArray;
    Var
      Device, Driver, Port: array [0..255] of Char;
      hDevMode: THandle;
      i, numBinNames, numBins, temp: Integer;
      pBinNames: PBinnameArray;
      pBins: PBinArray;
     
    Begin
         ComboBox4.Clear;
         Printer.PrinterIndex := ComboBox1.ItemIndex;
         Printer.GetPrinter(Device, Driver, Port, hDevmode);
         numBinNames := WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, nil, nil);
         numBins     := WinSpool.DeviceCapabilities(Device, Port, DC_BINS, nil, nil);
         If numBins <> numBinNames Then
         raise Exception.Create('DeviceCapabilities reports different number of bins and bin names!');
     
         If numBinNames > 0 Then
         Begin
              pBins := Nil;
              GetMem(pBinNames, numBinNames * SizeOf(TBinname));
              GetMem(pBins, numBins * SizeOf(Word));
              Try
                 WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, PChar(pBinNames), Nil);
                 WinSpool.DeviceCapabilities(Device, Port, DC_BINS, PChar(pBins), Nil);
                 For i := 1 To numBinNames Do
                 Begin
                      temp := pBins^[i];
                      ComboBox4.Items.AddObject(pBinNames^[i], TObject(temp));
                 End;
              Finally
                     FreeMem(pBinNames);
                     If pBins <> Nil Then
                     FreeMem(pBins);
              End;
         End;
         ComboBox4.ItemIndex:=0;
    end;
    Jusque là tout fonctionne bien.

    Un bouton permet ensuite d'imprimer une bête page de test :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    procedure TForm1.Button1Click(Sender: TObject);
     
    Var
       FDevice,FDriver,FPort: array [0..255] of Char;
       DeviceMode: THandle;
       OldMode : Integer;
       DevMode: PDeviceMode;
       CurrentStep : AnsiString;
     
    begin
         Try
            CurrentStep:='Début';
            If ComboBox1.Items.Count = 0 Then Exit;
            CurrentStep:='ComboBox1.Items.Count > 0';
     
            Printer.PrinterIndex:=ComboBox1.ItemIndex;
            CurrentStep:='PrinterIndex';
     
            Printer.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
            CurrentStep:='GetPrinter';
     
            DevMode := GlobalLock(DeviceMode);
            CurrentStep:='GlobalLock';
     
            if  ((DevMode^.dmFields and DM_DEFAULTSOURCE) = DM_DEFAULTSOURCE) then
            begin
                 DevMode^.dmFields := DevMode^.dmFields or DM_DEFAULTSOURCE;
                 CurrentStep:='dmFields';
     
                 If ComboBox4.ItemIndex >= 0 Then
                 Begin
                      DevMode^.dmDefaultSource := Integer(ComboBox4.Items.Objects[ComboBox4.ItemIndex]);
                      CurrentStep:='dmDefaultSource';
                 End;
            end;
     
            Printer.SetPrinter(FDevice , FDriver, FPort, DeviceMode);
            CurrentStep:='SetPrinter';
     
            GlobalUnlock(DeviceMode);
            CurrentStep:='GlobalUnlock';
     
            Printer.Title:='TEST '+ComboBox1.Text;
            CurrentStep:='Title';
     
            Printer.BeginDoc;
            CurrentStep:='BeginDoc';
            Printer.Canvas.Brush.Color:=clWhite;
            CurrentStep:='Brush.Color';
            Printer.Canvas.FillRect(Printer.Canvas.ClipRect);
            CurrentStep:='FillRect';
            Printer.Canvas.Brush.Style:=bsSolid;
            CurrentStep:='Brush.Style';
            Printer.Canvas.Font.Name:='Arial';
            CurrentStep:='Font.Name';
            Printer.Canvas.Font.Size:=20;
            CurrentStep:='Font.Size';
            Printer.Canvas.Font.Color:=clRed;
            CurrentStep:='Font.Color';
            Printer.Canvas.TextRect(Rect(200,200,Printer.PageWidth-200,Printer.PageHeight-200),
                                    200, 200, 'Test d''impression DELPHI');
            CurrentStep:='TextRect1';
            Printer.Canvas.TextRect(Rect(200,1000,Printer.PageWidth-200,Printer.PageHeight-1000),
                                    200, 1000, ComboBox1.Text);
            CurrentStep:='TextRect2';
            Printer.Canvas.TextRect(Rect(200,2000,Printer.PageWidth-200,Printer.PageHeight-2000),
                                    200, 2000, 'Recto');
            CurrentStep:='TextRect3';
     
            Printer.EndDoc;
            CurrentStep:='EndDoc';
         Except
               On E:Exception Do
               MessageDlg('Erreur étape : <'+CurrentStep+'>'+#13+#10+E.Message,mtError,[mbOK],0);
         End;
    end;
    Ce code déclenche une erreur chez mon client :
    Message d'erreur : "Imprimante sélectionnée incorrecte"

    Ce message se déclenche sur la ligne suivante :
    Il utilise une imprimante HP OfficeJet 7000 A3. Une seule source papier nommée "Bac 1" est détectée par le système.

    Ce qui est bizzare, c'est que si il utilise l'une de ses autres imprimantes, l'impression se passe sans problème.
    Si il imprime sur cette imprimante depuis une autre application, pas de problème non plus.

    Quelqu'un a-t-il déjà rencontré ce problème? Comment puis-je le résoudre?

    Merci d'avance.

    PS. Je suis sous Delphi 6, le client est sous Windows 7

  2. #2
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour,

    Hé oui sur des dizaines de milliers de téléchargement d'un programme, l'autre fois j'avais un (et un seul jusque là) utilisateur qui au moment de lancer l'impression, hé bien le programme plantait sec !

    Après bien des recherches, il s'avère que s'il affecte une imprimante sélectionnée (par Windows) par défaut ; ça passe comme une lettre à la Poste.

    Je n'ai pas encore trouvé la raison spécifique de tout ça, mais ça dépanne

    Si ça peut te rassurer ; tu n'es pas le seul

    @+

  3. #3
    Membre régulier
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 93
    Points
    93
    Par défaut
    Salut Droïde Système7, merci de ta réponse, désolée de mon temps de réaction

    C'est aussi mon cas, je n'ai qu'un utilisateur qui a un problème avec une seule de ses imprimantes (Super )

    Par contre, le fait de définir l'imprimante par défaut ne résout pas le problème (Bizzare bizzare, je continue d'investiguer)

    Merci quand même.

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour,

    y a pô l'feu au lac

    Nono23, hé oui curieux tout ça !

    Ce serait intéressant de voir si en updatant (si possible) le pilote de l'imprimante en question ; ça continue.

    On se tient au jus, car je serais très curieux de savoir la base de tout ça.

    Pour l'imprimante en question à mettre "par défaut" j'espère que ton client ne l'a pas fait avec ton programme lancé hein.

    Car j'en ai déjà vu... Sans parler d'ouvrir la fenêtre du bureau

    @+

    Edit : L'autre fois j'avais un utilisateur qui allait me faire devenir chèvre.
    Bref il avait trifouillé des tas de trucs dans le pilote d'une imprimante bien particulière. En autre un format "affiches". Mais il ne s'en est souvenu que fort tard
    Tout ceci pour dire qu'il vaut mieux en ces cas, demander à l'utilisateur de partir sur de bonnes bases ; par exemple lui demander (en Panneau de config/Imprimantes) de cloner cette imprimante et de l'utiliser pour les essais. Car son pilote sera vierge de toute bidouille.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Marrant le problème .

    J'ai dépanné un de tes compatriotes ayant le même soucis et il s'est avéré que celui-ci n'avait pas vraiment intégré la notion 'réseau' et son imprimante ayant une sortie // et une sortie USB il vait branché cette dernière en USB sur un poste et // sur l'autre : EN MËME TEMPS et cela donnait a peu près la même erreur mais pas a chaque fois (dépendant du PC démarré en premier) .

    Je n'ose croire que ce soit la même erreur , ce genre de truc ne doit arriver qu'une fois dans une vie
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre régulier
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message

    y a pô l'feu au lac


    Bonjour tout le monde, merci de vos réponses.

    Concernant l'imprimante par défaut, mon client a bien redémarrer le programme, il a même essayer de redémarrer le PC, rien à faire (Grrrr)

    @SergioMaster : L'imprimante de mon client est aparemment une imprimante branchée uniquement en réseau et non en local sur un poste, je vais demander une confirmation de cette information

    Je n'ose croire que ce soit la même erreur , ce genre de truc ne doit arriver qu'une fois dans une vie
    J'espère aussi que ça n'arrive qu'une fois


    J'ai demandé au service info de ce client de réinstaller l'imprimante en question. On verra si ça arrange un peu les choses.

    Je vous tiens au courant si il y a des avancées sur ce problème

    Déjà merci de vos réponses

Discussions similaires

  1. Impression sur une imprimante sélectionnée au préalable
    Par Spanish_ dans le forum VBA Access
    Réponses: 3
    Dernier message: 23/04/2008, 11h23
  2. Réponses: 21
    Dernier message: 11/06/2007, 09h30
  3. Imprimer sur une imprimante particulière
    Par b.avet dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 10/01/2007, 15h44
  4. Forcer l'impression sur une imprimante
    Par Poussy-Puce dans le forum ASP
    Réponses: 1
    Dernier message: 21/11/2006, 00h27
  5. Imprimer sur une imprimante donnée
    Par scorpion37 dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/06/2006, 11h32

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