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 :

gestion des impressions


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut gestion des impressions
    Bonjour,

    Je voudrais savoir s'il y a un moyen de connaître le nombre de documents dans le spool d'impression à partir de delphi?


    Merci.

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 030
    Points
    7 030
    Par défaut
    Peut-être en énumérant les jobs d'impression avec EnumJobs (dans l'unité WinSpool).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Mais EnumJObs ça compte les documents dans le spool de l'imprimante non?
    Moi je voudrais les documents en attente dans le spool windows.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    mais sinon je vois pas trop comment utiliser EnumJObs, j'ai commencé delphi il y a 2 jours

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 030
    Points
    7 030
    Par défaut
    Citation Envoyé par Gunboule Voir le message
    mais sinon je vois pas trop comment utiliser EnumJObs, j'ai commencé delphi il y a 2 jours
    C'est sûr que manipuler les API Windows, c'est pas simple.
    Voilà un bout de code que j'ai fait à partir de ce que j'ai trouvé sur le net :
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    uses Printers, WinSpool;
     
    procedure TFormImprimante.ListeJobs;
       procedure AjoutLigne(ListViewJob: TListView; const szNom, szValeur: String);
       var
          Items: TListItem;
       begin
          Items := ListViewJob.Items.Add;
          Items.Caption := szNom;
          Items.SubItems.Add(szValeur);
       end;
    type
       TJobs = Array[0..1000] of JOB_INFO_2;
       PJobs = ^TJobs;
    var
       Device, Driver, Port: Array[0..255] of Char;
       hDeviceMode: THandle;
       pDefault: PPrinterDefaults;
       hPrinter: THandle;
       nBytesNeeded, nReturned: Cardinal;
       pBufferJob: PJobs;
       i: Integer;
       TabSheetJob: TTabSheetJob;
    begin
       _ListePage.Clear;
       Printer.PrinterIndex := Printer.Printers.IndexOf(_szImprimante);
       Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
       pDefault := AllocMem(SizeOf(pDefault^));
       try
          with pDefault^ do
          begin
             pDataType := nil;
             pDevMode := nil;
             DesiredAccess := PRINTER_ACCESS_USE;
          end;
     
          if OpenPrinter(@Device, hPrinter, pDefault) then
          begin
             try
                // Initialisations.
                nBytesNeeded := 0;      nReturned := 0;
                EnumJobs(hPrinter, 0, 1000, 2, nil, 0, nBytesNeeded, nReturned);
                if nBytesNeeded > 0 then
                begin
                   pBufferJob := AllocMem(nBytesNeeded);
                   try
                      // Récupération des jobs.
                      if EnumJobs(hPrinter, 0, 1000, 2, pBufferJob, nBytesNeeded, nBytesNeeded, nReturned) then
                      begin
                         // Si pas de job trouvé.
                         if nReturned = 0 then
                         begin
                            TabSheetJob := TTabSheetJob.Create(PageControlJobs, True);
                            AjoutLigne(TabSheetJob.ListViewJobs, '', '[ PAS DE JOBS ]');
                            _ListePage.Add(TabSheetJob);
                         end
                         else
                         begin
                            // Parcours des jobs trouvés.
                            for i:=0 to Pred(nReturned) do
                            begin
                               TabSheetJob := TTabSheetJob.Create(PageControlJobs);
                               AjoutLigne(TabSheetJob.ListViewJobs, 'JobId', IntToStr(pBufferJob^[i].JobId));
                               AjoutLigne(TabSheetJob.ListViewJobs, 'PrinterName', pBufferJob^[i].pPrinterName);
                               AjoutLigne(TabSheetJob.ListViewJobs, 'MachineName', pBufferJob^[i].pMachineName);
                               AjoutLigne(TabSheetJob.ListViewJobs, 'UserName', pBufferJob^[i].pUserName);
                               AjoutLigne(TabSheetJob.ListViewJobs, 'Document', pBufferJob^[i].pDocument);
     
    ...
     
                               _ListePage.Add(TabSheetJob);
                            end;
                         end;
                      end
                      else      //.Si erreur.
                      begin
                         TabSheetJob := TTabSheetJob.Create(PageControlJobs);
                         AjoutLigne(TabSheetJob.ListViewJobs, ' ERREUR', '[' + SysErrorMessage(GetLastError) + ']');
                         _ListePage.Add(TabSheetJob);
                      end;
                   finally
                      FreeMem(pBufferJob);
                   end;
                end
                else
                begin
                   TabSheetJob := TTabSheetJob.Create(PageControlJobs, True);
                   AjoutLigne(TabSheetJob.ListViewJobs, '', '[ PAS DE JOBS ]');
                   _ListePage.Add(TabSheetJob);
                end;
             finally
                ClosePrinter(hPrinter);
             end;
          end;
       finally
          FreeMem(pDefault);
       end;  
    end;
    Je te le donne brut. Faut adapter à ton besoin.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Merci, j'ai également trouvé un bout de code de mon côté, du coup j'ai réussi à m'en sortir, je peux trouver le nombre de documents en attente dans l'imprimante.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Nouvelle question, avec ton code tu peux mettre jusqu'à combien de documents en attente dans l'imprimante? Autant que tu veux?


    Merci.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Ok c'est bon j'ai compris.

    Merci pour ton code il est plus complet que le mien, et plus optimisé.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des impressions avec AIX
    Par passou dans le forum AIX
    Réponses: 1
    Dernier message: 19/05/2009, 09h28
  2. [Conception] Gestion des impressions
    Par fofovi72 dans le forum Général Java
    Réponses: 1
    Dernier message: 10/12/2007, 15h55
  3. [Débutant] - VB6 - Gestion des impressions
    Par LSG-Serval dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 22/08/2006, 15h32

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