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 :

[TPrinters] détecter annulation/erreur impression


Sujet :

Langage Delphi

  1. #41
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    et essaye de lancer plusieurs travaux en même temps!!!

    Pour voir quelles sont les valeurs résultantes des états!!!

    Celles qui sont données sur la page ont l'air erronnées!!!

    Je veux la valeur imprimante busy!!!!

    Allez au travail

    Et ne mets que le Abort que si tu as lancé une impression!!!

    Donc il faut que tu testes aussi si ton imprimante est en train d'imprimer!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If (Printer.Printing) and (not Travailtermine) then
    Printer.Abort;
    Allez!!! Au travail!!!

    Chris

  2. #42
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Il me semble que l'on va obtenir une valeur d'état telle que :

    Status = Status + 40 pour chaque valeur...

    Bizarre, je ne vois pas d'où vient cet offset???

    Bon on va pouvoir avancer un peu!!!

    Donne moi de tes nouvelles!!!

    Chris

  3. #43
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Oublies mon dernier post...

  4. #44
    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
    Hello !

    Hé hé, je place ci-dessous la version "hyperbasic" de ces 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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Label1: TLabel;
        BtnTestError: TButton;
        Label2: TLabel;
        Label3: TLabel;
        procedure BtnTestErrorClick(Sender: TObject);
        function TestPrinterStatus(LPTPort: Word): Byte;
     
      private
        { Déclarations privées }
     
      public
        { Déclarations publiques }
         end;
     
    var
      Form1: TForm1;
     
    implementation
     
    uses Printers;
     
     
    {$R *.dfm}
     
     
     
    procedure TForm1.BtnTestErrorClick(Sender: TObject);
     var status : byte;
      begin
       Status := 0;
       Status :=TestPrinterStatus(01); // "1" ou "01" pour LPT1...
    end;
     
     
     
    function TForm1.TestPrinterStatus(LPTPort: Word): Byte;
      var
        Status: byte;
        CheckLPT: word;
     begin
       Status := 0;
     
      if (LPTPort >= 1) and (LPTPort <= 3) then
      begin
        CheckLPT := LPTPort - 1;
        asm
          mov dx, CheckLPT;
          mov al, 0;
          mov ah, 2;
          int 17h;
          mov &Status, ah;
             end;
           Label1.caption := IntToStr(Status);
       end;
    end;
     
     
     
    END.

    Bon... alors les codes retournés :
    48 = printeuse éteinte
    144 = printeuse allumée
    16 = plus de papier

    En cours de printage = toujours le 144

    Je précise que j'ai viré les Printer.Abort = à tous les coups ça plante !

    Je précise aussi que je viens de remettre une autre printeuse par défaut = sur port PRNUSB01 et malgré cela, la détection du port LPT1 fonctionne toujours nickel.

    J'ai viré aussi le booléan...

    Par contre, puisque je supppose que désormais la majorité des utilisateurs ont une printeuse en USB... faut que je trouve comment, je regarde

    Encore merci Chris, sans toi je ne sais pas si j'aurais trouvé la parade.

    Merci aussi à la femme araignée

    @+
    Jean-Pierre

  5. #45
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Pour checker le status de ton imprimante USB tu as cette URL:

    http://groups.google.fr/group/borland.public.delphi.nativeapi/browse_thread/thread/e9c93dde1a05831e/25dc2ab7cd978049%2325dc2ab7cd978049?sa=X&oi=groupsr&start=2&num=3

    Un peu longue mais intéressante!!!

    Permet de checker l'état 'out of paper'...

    Allez!!!

    Christopher

  6. #46
    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
    Chris,

    Citation Envoyé par lapec_and_cie
    Pour checker le status de ton imprimante USB tu as cette URL:

    http://groups.google.fr/group/borlan...=2&num=3<br />

    Un peu longue mais intéressante!!!

    Permet de checker l'état 'out of paper'...

    Allez!!!

    Christopher[/code]

    Oui pas mal du tout, mais ce que je cherche - à moins que je sois passé à côté - , c'est aussi détecter si une printeuse sur USB est branchée ou débranchée. Exactement l'équivanlent de ton code ci-dessus.

    Mais je crains qu'il faille passer par l'ASM

    @+ et ce soir...

  7. #47
    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 Suite et persévérance ;o)
    Bonjour,

    Suite...

    Je continue ma recherche d'un code qui détecte surtout par exemple, si une imprimante sur le port USB est débranchée, afin d'ensuite traiter le retour de fonction.

    Pour la détection au niveau du LPT1 ; c'est fait grâce aux messages précédents.

    Je me suis replongé dans la page que Christopher m'avait si gentiment trouvé via l'URL ci-dessus.

    Mais URL no valide... heureusement je n'avais pas vidé le cache de mon butineur.

    Mais je n'arrive pas à récupérer les infos retournées de la function via mon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(GetPrinterStatus());
    Voici le code en entier :

    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
     
    ...
    uses
    Printers, WinSpool;
     
    ...
     
     
    function TForm1.GetCurrentPrinterHandle: THandle;
    const
      Defaults: TPrinterDefaults = (
                      pDataType: nil;
                      pDevMode: nil;
                      DesiredAccess: PRINTER_ACCESS_USE or
    PRINTER_ACCESS_ADMINISTER);
    var
      Device, Driver, Port: array[0..255] of char;
      hDeviceMode: THandle;
    begin
      Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
      if not OpenPrinter(@Device, result, @Defaults) then
        RaiseLastWin32Error;
    end;
     
     
    function TForm1.GetPrinterStatus: string;
    var
      hPrinter: THandle;
      bytesNeeded, i: cardinal;
      pInfo: PPrinterInfo2;
      S: string;
    begin
      GetPrinter( hPrinter, 2, Nil, 0, @bytesNeeded );
      pInfo := AllocMem( bytesNeeded );
      try
        GetPrinter( hPrinter,  2, pInfo, bytesNeeded, @bytesNeeded );
    EXCEPT
        case pInfo^.Status of
        PRINTER_STATUS_PAPER_OUT:       S := 'PRINTER_STATUS_PAPER_OUT';
        PRINTER_STATUS_PAPER_PROBLEM:   S := 'PRINTER_STATUS_PAPER_PROBLEM';
       else
            S := 'Unknown';
         end;
      end;
    end;
     
     
    procedure TForm1.BtnStatusClick(Sender: TObject);
     begin
      ShowMessage(GetPrinterStatus());
    end;
    Enfin, tout se compil nickel les doigts dans le pif, mais le ShowMessage est vierge.

    Merci de vos idées.

  8. #48
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Algérie

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 5
    Points
    5
    Par défaut comment configurer l'imprimante sous delphi ???
    Salut zazaraignée à ce ke je vois tu es assez calé coté impréssion, ce ki n'est pas le cas pour moi esq tu px me montrer stp comment appeller la fenetre de windows qui configure l'imprimante par ex la qualité du papier, le nombre de feuliies... ect merci d'avance

  9. #49
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Citation Envoyé par djazialger Voir le message
    Salut zazaraignée à ce ke je vois tu es assez calé coté impréssion, ce ki n'est pas le cas pour moi esq tu px me montrer stp comment appeller la fenetre de windows qui configure l'imprimante par ex la qualité du papier, le nombre de feuliies... ect merci d'avance
    Voici un cours très intéressant qui est une introduction à ce que vous cherchez.
    Bon courage.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

Discussions similaires

  1. [VB.NET][VS2005] Classe PrintDocument - annuler l'impression
    Par annedeblois dans le forum Windows Forms
    Réponses: 3
    Dernier message: 23/10/2006, 14h14
  2. Réponses: 1
    Dernier message: 13/06/2006, 15h11
  3. Annuler une impression ??
    Par Ben_Le_Cool dans le forum Delphi
    Réponses: 11
    Dernier message: 08/06/2006, 20h30
  4. Comment détecter une erreur dans un process
    Par chuckboy dans le forum MFC
    Réponses: 3
    Dernier message: 25/10/2005, 10h40
  5. annuler une impression en cour
    Par mondanikoffi dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/07/2005, 20h56

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