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

Delphi Discussion :

Gestion TPrinter et multi imprimantes


Sujet :

Delphi

  1. #1
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut Gestion TPrinter et multi imprimantes
    J'ai en tete un projet et j'aimerais avori quelques informations avant de me lancer, pour cibler mes rehcerches.

    Mon projet doit pouvoir scanner un repertoire pour lister les images qu'il contient et dispatcher automatiquement l'inpression de ces photos sur un parc de N imprimantes afin d'accelerer le rendement d'impression.
    Le repertoire est alimenté en cours de route par les photographes qui y dechargent leur appareils periodiquement.

    Pour l'enemble du projet, j'ai deja tout ce qu'il me faut, et sais comment gerer ma barque. Ce qui me manque c'est la gestion du transfert de l'image charge en memoire vers l'imprimante pour l'ajouter au pool d'impression et comment manager les N imprimantes et leurs configurations en simultanées.
    Accessoirement, savoir aussi detecter la fin d'une impression.

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Accessoirement, savoir aussi detecter la fin d'une impression.
    C'est pas aussi "accessoire" que cela car pour gérer les N imprimantes faut savoir à chaque instant si telle ou telle imprimante :
    1 - est sous tension (doit être faisable),
    2 - est en état d'imprimer-correctement : bourrage intempestif, bac-à-papier épuisé, cartouche d'encre pas tout à fait vidée qui n'imprime plus que partiellement bien avant que le voyant rouge ne s'allume ... c'est à dire des incidents qui jouent dans la gestion,
    3 - et enfin, si tout se passe bien, détecter la fin de l'impression à moins que les fichiers-photo ne puissent s'accumuler dans la file d'attente de chaque imprimante (liste du Gestionnaire d'impression).

    TPrinter.Printing : Boolean indique si un travail d'impression est en cours sur l'imprimante concernée ... mais n'indique pas si l'impression est encore de bonne qualité. De plus Printing vaut True quand l'application a appelé la méthode BeginDoc mais qu'elle n'a pas encore appelé la méthode EndDoc (ou la méthode Abort) autrement dit si un incident survient avant le EndDoc Printing risque de rester à True longtemps.

    Le sujet m'intéresse, car je me suis déjà cassé la tête avec sans succès ... mais comme je ne suis qu'autodidacte en Delphi il y a certainement des plus fortiches que moi à pouvoir aller plus loin.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 147
    Par défaut
    Jetes un oeil sur cette source pour imprimer les images

    http://www.efg2.com/Lab/Library/Delp...ntGIFImage.TXT

    Pour le status de l'imprimante, use Winspool

    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
     
    function GetPrinterStatus(APrinterName: PChar): DWORD;
    var
      HPrinter: THandle;
      BytesNeeded: Cardinal;
      PrinterDefaults: PRINTER_DEFAULTS;
      PI2: ^PRINTER_INFO_2;
    begin
      with PrinterDefaults do
      begin
        DesiredAccess := PRINTER_ACCESS_USE;
        pDatatype := nil;
        pDevMode := nil;
      end;
      Win32Check(OpenPrinter(APrinterName, HPrinter, @PrinterDefaults));
      try
        if not GetPrinter(HPrinter, 2, nil, 0, @BytesNeeded) then
        begin
          GetMem(PI2, BytesNeeded);
          try
            if GetPrinter(HPrinter, 2, PI2, BytesNeeded, @BytesNeeded) then
              Result := PI2^.Status
              ///  PI2^.cJobs <== INDIQUE LE NOMBRE DE DOCUMENTS EN COURS
            else
              Result := MaxWord;
          finally
            FreeMem(PI2);
          end;
        end
        else
          Result := MaxWord;
      finally
        ClosePrinter(HPrinter);
      end;
    end;
    limiter le nombre de documents envoyé pour chaque imprimante en scrutant les jobs en cours

    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
     
    function GetSpoolerJobs(sprinterName: string): JOB_INFO_1_ARRAY;
    var
     i: Integer;
     myprinter: THandle;
     bResult: Boolean;
     cbBuf: DWORD;
     pcbNeeded: DWORD;
     pcReturned: DWORD;
     aJobs: array[0..99] of JOB_INFO_1;
    begin
     cbBuf := 1000;
     bResult := Openprinter(PChar(sprinterName), myprinter, nil);
     if not bResult then begin
       ShowMessage('Error opening the printer');
       exit;
     end;
     bResult := EnumJobs(myprinter, 0, Length(aJobs),
                    1, @aJobs, cbBuf, pcbNeeded, pcReturned);
     if not bResult then begin
       ShowMessage('Error Getting Jobs information');
       exit;
     end;
     Closeprinter(myprinter);
     for i := 0 to pcReturned - 1 do begin
       if aJobs[i].pDocument <> nil then begin
         SetLength(Result, Length(Result) + 1);
         Result[Length(Result) - 1] := aJobs[i];
       end;
     end;
    end;

  4. #4
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par Gilbert Geyer
    C'est pas aussi "accessoire" que cela[...]
    JE me doutais bien que cela n'etait pas aussi trivial que ce qu'il ny parrait


    Citation Envoyé par Gilbert Geyer
    car pour gérer les N imprimantes faut savoir à chaque instant si telle ou telle imprimante :
    1 - est sous tension (doit être faisable),
    Dans un premier temps, on supposera qu'elle le sont on parametre le tout, et une fois ok, on lance le systeme.

    Citation Envoyé par Gilbert Geyer
    2 - est en état d'imprimer-correctement : bourrage intempestif, bac-à-papier épuisé, cartouche d'encre pas tout à fait vidée qui n'imprime plus que partiellement bien avant que le voyant rouge ne s'allume ... c'est à dire des incidents qui jouent dans la gestion,
    LA aussi, le parc d'imprimantes est constitué d'imprimantes photos style canon selphy, avec systeme d'impression par sublimation thermique.
    C'est une technique qui depends de la taille du ruban d'impression et non de la proportion de couleurs sur une image ... donc une cartouche de 36 photos, assure 36 impressions qualité optimale.
    Du coup ca doit etre jouable en utilisant une compteur interne qui gere le nombre de photos restante, sans avoir a dialoguer avec l'appareil.
    Quand au bourrage papier ... c'est une donnee a prendre en compte ... mais pour le moment extremement rare.


    Citation Envoyé par Gilbert Geyer
    3 - et enfin, si tout se passe bien, détecter la fin de l'impression à moins que les fichiers-photo ne puissent s'accumuler dans la file d'attente de chaque imprimante (liste du Gestionnaire d'impression).
    La, je mise quand meme sur la gestion du poll d'impression, qui a mon avis depends plus de la configuration windows que de la gestion via l'application ...

    Citation Envoyé par Gilbert Geyer
    TPrinter.Printing : Boolean indique si un travail d'impression est en cours sur l'imprimante concernée ... mais n'indique pas si l'impression est encore de bonne qualité. De plus Printing vaut True quand l'application a appelé la méthode BeginDoc mais qu'elle n'a pas encore appelé la méthode EndDoc (ou la méthode Abort) autrement dit si un incident survient avant le EndDoc Printing risque de rester à True longtemps.
    ok.
    J'ai deja eu affaire a la classe TPrinter mais juste comme ca ... pour m'amuser.
    Begin/endDoc lance le document ? ou sert juste a concevoir l'impression, etant apres transmise au systeme windows ?
    Ca me semble peu envisageable d'activer l'impression des le BeginDoc, ....

    Citation Envoyé par Gilbert Geyer
    Le sujet m'intéresse, car je me suis déjà cassé la tête avec sans succès ... mais comme je ne suis qu'autodidacte en Delphi il y a certainement des plus fortiches que moi à pouvoir aller plus loin.
    Moi aussi je suis autodicdate
    C'est pour ca que je requiere certains conseils pour cibler mes recherches

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par EPJSoft
    Jetes un oeil sur cette source pour imprimer les images

    http://www.efg2.com/Lab/Library/Delp...ntGIFImage.TXT

    Pour le status de l'imprimante, use Winspool
    [...]
    je vais voir ca plus en detail ....
    Ca m'a tout l'air interessant.


    Reste un point important : le parametrage des impressions (selection bac, correction couleurs, disposition, etc ...) telle que l'on peut le faire via tout logiciels gerant l'impression.
    Je sais qu'il y a le printerDialog mais je n'ai jamais eu l'occasion de bien cerner son fonctionnement ....

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 147
    Par défaut Tips and Tips
    as tu regardé en t'orientant vers un style report (crystal...) en collant les images dessus ?

    sinon
    http://www.scalabium.com/faq/dc_tips.htm section Report Printing


    (attention moi j'en suis pas encore à imprimer dans mes projets mais cela va venir lol alors j'ai juste testé l'histoire du status... je cherche pas pour rien cela me servira plus tard :=) )

    Phil

  7. #7
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Oui ca peut etre une solution .... mais pas franchement celle que j'attendais

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Pas mal le site signalé par EPJSoft on y trouve déjà du code pour "#0047 = The list of jobs in the MS Windows print spooler ".
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    J'ajoute ma petite contribution à ce thread :
    http://www.developpez.net/forums/showthread.php?t=86253

    En effet, ne pas négliger les aléas divers ; bourrages, imprimante non branchée, plus de paper, etc.

    Si seulement toutes les imprimantes étaient branchées sous LPT1, car sous USB...

    Bonne lecture

    PS : Un bon zip à Nono40, surveiller un serveur d'impression :
    http://delphi.developpez.com/sources...no40source0071

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    A Clorish / msg d'Hier, 15h15


    /à détection état de mise sous tension des imprimantes [/B]: Ok, y'a-k'à faire le tour pour les mettre toutes sous tension.

    /"bourrage papier ... extremement rare" : Ok, vu que le papier utilisé pour l'impression de photos (j'avais oublié) est certainement bien plus rigide que du papier à lettre courant.

    /"donc une cartouche de 36 photos, assure 36 impressions qualité optimale ... :
    Cela signifie-t-il qu'une cartouche d'encre doit être déjà remplacée au bout de la 36ème photo ? Bizarre... et si chaque lot de 36 photos est imprimé en X minutes faudrait changer les cartouches d'encre toutes les X minutes ?

    /"TPrinter.Printing" : Ok je me suis laissé tromper par l'intitulé "Printing" et par l'aide de Delphi. En fait Printing:=true seulement pendant que l'on trace qq-chose sur le canvas d'un Printer ... et ensuite Printing:=false à partir de l'instant où le EndDoc passe la main à Windows qui s'occupe de l'impression mécanique pendant laquelle Printing:=false (!!!) ... donc "Printing":=faux-ami.

    / ... je mise quand même sur la gestion du poll d'impression" :
    C'est de plus en plus clair ... d'autant plus qu'il a été cité plusieurs fonctions qui peuvent renvoyer le nombre de documents en attente ou en cours dans le pool d'impression et si ce nombre redescend à 0 on part remplacer la cartouche d'encre (oui/non ?) puis on envoie à l'imprimante en question une rafale de 36 photos suivantes.

    Reste plus qu'à tester les codes des diverses fonctions citées suivant la version de Windows utilisée.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  11. #11
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par Gilbert Geyer
    /"donc une cartouche de 36 photos, assure 36 impressions qualité optimale ... :
    Cela signifie-t-il qu'une cartouche d'encre doit être déjà remplacée au bout de la 36ème photo ? Bizarre... et si chaque lot de 36 photos est imprimé en X minutes faudrait changer les cartouches d'encre toutes les X minutes ?
    Bha vi C'est ca qui est bien
    Le principe de l'impression par sublimation thermique est qu'on utilise un ruban sur lequel sont disposée par alternance une bande rouge, une bande jaune et une bande bleue. Chaques bandes son de superficie egale a la superficie de la photo a imprimer.
    Ensuite, quand la photo passe au travers de l'imprimante, le rouleau defile en meme temps que le paper et transfert a la maniere des decalcomanie de notre enfance, la couleur du rouleau vers le papier. Couche par couche grace a des aller et retour de papier. Le plus par rapport au decalcomanie c'ets que la quantitée transferee depends j'imagine de la quantité de la composante du pixel a imprimer ...

    Du coup, 1 photo necessite une bande rouge une bande jaune et une bande bleu .. .(plus uen 4e de fixation j'imagine, sorte de vernis).

    Donc chaques cartouches est prevue pou N Photos ... pas uen de plus pas uen de moins, et de qualité constante

    Au passage, cest super ces imprimantes un peu cher (26cts/photos pour la mienne) par rapport aux tarifs du net, mais de bonne qualité et pratique pour l'urgence

    on a mis en palce un stand a la kermesse de l'ecole de ma femme et ca a fait fureur !
    On cherche a optimiser le rendement pour l'annee prochaine

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    A Clorish :

    Impression par sublimation thermique : Vu, ça a l'air pas mal, je ne connaissais pas ... bon ça se comprend vu que les photos c'est pas vraiment mon truc, chez moi elles passent dans les oubliettes.

    "Donc chaque cartouche est prevue pour N Photos" : Et, si N est le même pour toutes les imprimantes à gérer par ton projet et que toutes les imprimantes on la même vitesse d'impression cela devrait permettre de simplifier la mise au point du projet, comme toute constante. Non?
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  13. #13
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par Gilbert Geyer
    Impression par sublimation thermique : Vu, ça a l'air pas mal, je ne connaissais pas ... bon ça se comprend vu que les photos c'est pas vraiment mon truc, chez moi elles passent dans les oubliettes.
    A mon avis tu ne doit pas avoir encore de gosses

    Citation Envoyé par Gilbert Geyer
    "Donc chaque cartouche est prevue pour N Photos" : Et, si N est le même pour toutes les imprimantes à gérer par ton projet et que toutes les imprimantes on la même vitesse d'impression cela devrait permettre de simplifier la mise au point du projet, comme toute constante. Non?
    Tout a fait .. donc pour l'autonomie pas de soucis
    Mais pour l'impression, je prefere me baser sur un systeme de detection de fin d'impression que sur l'hypothetique duree d'impression .. car c'ets quand meme moins constant que le nombre de tirages (materiel qui chauffe, initialisations, transfert .....) ou alors on prends de la marge et ca empiete sur le rendement

    Non, l'ideal serait de lancer les impression dans le pool d'imrpession windows ... et ca je crois que c'est le cas. Du moins je l'espere .... Sinon ca deviendrais une tueris a mettre en place dans chaques applications

    Si tel est le cas .. alors calculer une duree moyenn des impression permettrait de temporiser le lancemetn des impressions pour ne pas surcharger le pool et donner une chance a l'imprimante de le vider un peu

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    A Clorish :

    "A mon avis tu ne doit pas avoir encore de gosses" : non le gosse c'est moi.

    "je prefere me baser sur un systeme de detection de fin d'impression" : La durée-mini-d'impreesion de la bécane la plus rapide permettrait de fixer l'interval d'un timer dans lequel on fait appel à l'une des fonctions qui peuvent renvoyer le nombre de documents en attente ou en cours dans le pool d'impression et si ce nombre redescend à 0 on a detecté la fin d'impression de l'imprimante concernée. Non?
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  15. #15
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par Gilbert Geyer
    "A mon avis tu ne doit pas avoir encore de gosses" : non le gosse c'est moi.
    alors ca va venir la passion des photos

    Citation Envoyé par Gilbert Geyer
    "je prefere me baser sur un systeme de detection de fin d'impression" : La durée-mini-d'impreesion de la bécane la plus rapide permettrait de fixer l'interval d'un timer dans lequel on fait appel à l'une des fonctions qui peuvent renvoyer le nombre de documents en attente ou en cours dans le pool d'impression et si ce nombre redescend à 0 on a detecté la fin d'impression de l'imprimante concernée. Non?
    Oui .. ca c'est jouable.
    Timer ... ou un thread type Daemon
    Mais si une fois le document formaté, il est envoyé dans le pool windows .. en fait j'ai plus a me soucier de la fin d'impression vu que c'est windows qui s'en occupe. Juste me baser sur une moyenne pour ne pas flooder le pool windows ...


    Par contre 2 questions restent en suspend : Comment correctement definir les parametres d'impressions ?
    Je memorise les parametres de chaques imprimantes dans ue nstructure de donnée a moi, puis pour chaques images je parametre le TPrinter en tournant sur les config ? ou je peux gerer en parallele plusieurs instance de Printer, une par imprimantes ?

    D'autre part, comment gerer la configuration (complexe) des imprimantes (corrections couleurs, taille, disposition, etc ...) present dans le module de configuration de l'imprimante ? Ya le TPrinterDialog mais je cerne mal son comportement ...

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Au fait, mais la LibZPrinters (si mal documentée) n'est-elle pas plus évoluée et donc complète que la TPrinter ?

    Désolé de venir ici comme un clébard dans un jeu de quille

  17. #17
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    connait absolument pas .... mais si oui pourquoi pas
    Par contre ...si elle est mal documenté ca va etre coton .. heureusement que j'ai un an devant moi

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Citation Envoyé par Clorish
    connait absolument pas .... mais si oui pourquoi pas
    Par contre ...si elle est mal documenté ca va etre coton .. heureusement que j'ai un an devant moi
    http://www.logicomm.it/en/libzprinters.html

    Courage

    PS : http://alphomega.free.fr/delphi/composdelphi.html
    Il me semble que notre camarade alphomega (Jean-Luc) connaisse cette bibio.

  19. #19
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    A Clorish :
    "Ya le TPrinterDialog mais je cerne mal son comportement ..." : Pour se faire une idée tu peux tester l'exemple de code qui figure dans l'aide-Delphi à la rubrique TPrintDialog.PrintRange ... mais il y a peut-être d'autres tuyaux dns la Faq ou dans les tutos.

    "Comment correctement definir les parametres" : Pour ma part, vu qu'il y a plusieurs imprimantes je retiendrais comme structure le type MesImprimantes : tObject pour pouvoir ensuite décliner ce type sous forme de variables var Imprimante1, Imprimante2 ... : MesImprimantes histoire de faire un seul code pour les N imprimantes. Et dans le code de ce type je regrouperais les variables-imprimantes et les variables-image dont une instance de Printer
    et dans les méthodes déclarées sous ce type il y aurait bien entendu une procédure qui entre un BeginDoc et un EndDoc copie le fichier d'une photo sur le canvas du printer ... ceci suppose que la photo soit ajustée (marges, ou taille et positionnement) par rapport aux bords du canvas du printer compte tenu des marges techniques de l'imprimante (zone morte périphérique non imprimable). Voiçi une partie d'un code où j'ai galéré pour imprimer un TreeView :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure ParamsImprimante;
    begin     PixelsParPouceX:=GetDeviceCaps(Printer.Handle,LOGPIXELSX);
              PixelsParPouceY:=GetDeviceCaps(Printer.Handle,LOGPIXELSY);
              // Marges non imprimables :
              NonImprimablePixelsX:=GetDeviceCaps(Printer.Handle,PHYSICALOFFSETX);
              NonImprimablePixelsY:=GetDeviceCaps(Printer.Handle,PHYSICALOFFSETY);
              EchelleX:=GetDeviceCaps(Printer.Handle, logPixelsX) div frmEqArbre.PixelsPerInch;
              EchelleY:=GetDeviceCaps(Printer.Handle, logPixelsY) div frmEqArbre.PixelsPerInch;
     
    end;
    mais il y a certainement mieux que mes codes-de-bidouilleur dans les rubriques suivantes du site que nous a signalé EPJSoft : http://www.scalabium.com/faq/dc_tips.htm

    #0017 Printer settings - page sizes and margins (part1)
    #0019 To get a printer settings (part 2)
    #0020 To set a printer settings
    #0022 Printing on the TPrinter using default resident font (part 1)
    #0026 The printer capabilities to print a graphics
    #0032 To change the default printer in Windows
    #0047 The list of jobs in the MS Windows print spooler
    #0068 To use a resident font for printing (part 2)
    #0083 To print/preview the MS Access's report
    #0087 To send a command strings to printer
    #0090 To print a bitmap on printer

    ... le seul pb est qu'il faut tout tester avant d'utiliser, en fonction de la version du Windows utilisé
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  20. #20
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Comme le message de Droïde et le mien ont été régidés en parallèle, le mien n'est pas une invitation à ne pas essayer la libzprinters.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/09/2008, 13h26
  2. Réponses: 3
    Dernier message: 04/07/2008, 16h13
  3. Gestion flèches clavier multi touches
    Par PoZZyX dans le forum Windows Forms
    Réponses: 5
    Dernier message: 17/12/2007, 14h14
  4. [2.0][C#] : Gestion des droits Multi Siteweb
    Par stephane.net dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/01/2007, 10h42
  5. preconfiguration multi imprimantes
    Par EE dans le forum Access
    Réponses: 3
    Dernier message: 18/06/2006, 22h38

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