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

Composants VCL Delphi Discussion :

Paramètrage hauteur impression sans boîte de dialogue


Sujet :

Composants VCL Delphi

  1. #21
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    dmPaperSize

    Selects the size of the paper to print on. This member can be set to zero if the length and width of the paper are both set by the dmPaperLength and dmPaperWidth members. Otherwise, the dmPaperSize member can be set to one of the following predefined values:

    Value Meaning
    DMPAPER_LETTER Letter, 8 1/2- by 11-inches
    DMPAPER_LEGAL Legal, 8 1/2- by 14-inches
    DMPAPER_A4 A4 Sheet, 210- by 297-millimeters
    soit tu utilises une constante qui définit les 2, soit tu mets à 0 et tu règles largeur et hauteur grâce à
    dmPaperLength

    Overrides the length of the paper specified by the dmPaperSize member, either for custom paper sizes or for devices such as dot-matrix printers, which can print on a page of arbitrary length. These values, along with all other values in this structure that specify a physical length, are in tenths of a millimeter.

    dmPaperWidth

    Overrides the width of the paper specified by the dmPaperSize member.
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  2. #22
    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
    Bonsoir,

    Tourlourou, en fait si j'ai bien pigé (?) le code ci-dessus tel qu'il est, en particulier ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pDMode^.dmPaperSize := DMPAPER_USER;
    pDMode^.dmPaperWidth := 100 {SomeValueInTenthsOfAMillimeter};
    pDMode^.dmPaperLength := 100 {SomeValueInTenthsOfAMillimeter};
    Impose un odre comme le EndDoc après 100 millimètres de hauteur ?
    (Pour l'instant mettons de côté la largeur)

    Enfin sans oublier comme tu le dis de mettre à zéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pDMode^.dmPaperSize := 0;
    ??

    Je pensais l'avoir compris, mais trop beau pour être vrai... ::

    Merci @+

  3. #23
    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
    Re

    Après plusieurs essais, toujours aucune limitation de printage en hauteur :
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
    Device : array[0..255] of char;
    Driver : array[0..255] of char;
    Port : array[0..255] of char;
    hDMode : THandle;
    PDMode : PDEVMODE;
    begin
    Printer.PrinterIndex := Printer.PrinterIndex;
    Printer.GetPrinter(Device, Driver, Port, hDMode);
    if hDMode <> 0 then begin
    pDMode &#58;= GlobalLock&#40;hDMode&#41;;
    if pDMode <> nil then begin
     
    &#123;Set to legal&#125;
    // pDMode^.dmFields &#58;= pDMode^.dmFields or dm_PaperSize;
    // pDMode^.dmPaperSize &#58;= DMPAPER_FOLIO;    //DMPAPER_LEGAL;
     
    &#123;Set to custom size&#125;
    pDMode^.dmFields &#58;= DM_PAPERWIDTH;
     
    &#123; pDMode^.dmFields &#58;= pDMode^.dmFields or
    DM_PAPERSIZE or
    DM_PAPERWIDTH or
    DM_PAPERLENGTH; &#125;
     
    pDMode^.dmPaperSize &#58;= 0;   // DMPAPER_USER;
    pDMode^.dmPaperWidth &#58;= 10;  // &#123;SomeValueInTenthsOfAMillimeter&#125;;
    pDMode^.dmPaperLength &#58;= 10; // &#123;SomeValueInTenthsOfAMillimeter&#125;;
     
    &#123;Set the bin to use&#125;
    // pDMode^.dmFields &#58;= pDMode^.dmFields or DMBIN_MANUAL;
    // pDMode^.dmDefaultSource &#58;= DMBIN_MANUAL;
     
    GlobalUnlock&#40;hDMode&#41;;
    end;
    end;
    Printer.PrinterIndex &#58;= Printer.PrinterIndex;
    Printer.BeginDoc;
    Printer.Canvas.TextOut&#40;100,100, 'Imprime à environ 10 mm du haut'&#41;;
     
    Printer.Canvas.TextOut&#40;1500,3000, 'Imprime à environ 130 mm du haut'&#41;;
     
    Printer.Canvas.TextOut&#40;1600,3500, 'Imprime à environ 150 mm du haut'&#41;; 
     
    // Printer.Canvas.Rectangle&#40;4000,4000,1000,1200&#41;; // carré d'env. 100 x 100 mm à 40 mm bords
     
    Printer.EndDoc;
    end;
    Toutes ces trois lignes s'impriment, bien que j'ai limité... la hauteur de printage à 10 mm.

    Enfin j'ai certainement encore loupé une marche, mais laquelle ?

    @+

  4. #24
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Mais pourquoi tu écris au delà de la limite que tu as toi-même imposé ? C'est là toute la question

    Pour être franc j'ai jamais utilisé Tprinter (les seuls imprimés que j'ai eu à faire se sont faits via un quickreport) mais j'imagine que si tu écris dans les limites de la longueur de la page puis execute un Printer.newpage pour passer à la page suivante ça fonctionnera ...non?

  5. #25
    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
    Bonsoir,

    sfpx, oui en effet je printe aux tests au delà des limites que j'impose sur le code, justement pour voir si la limitation de la méthode est effective :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if print then niet BlocCode
    else
    OkCode lol;


    Pour être franc j'ai jamais utilisé Tprinter (les seuls imprimés que j'ai eu à faire se sont faits via un quickreport)
    J'avais également orienté mes recherches de ce côté, mais étant en version perso, pas de BDD...

    mais j'imagine que si tu écris dans les limites de la longueur de la page puis execute un Printer.newpage pour passer à la page suivante ça fonctionnera ...non?
    En fait, si j'ai bien compris le NewPage donne une nouvelle page, or je désire un EndDoc = un saut de page seul.

    Par exemple si je place dans le bac de ma printeuse un pile de fiches Rolo (ou autre...), nous voyons tout de suite que je recherche un EndDoc 'tout net' juste après la hauteur exacte de cette fiche, sans que la suivante avance d'un poil le bout de son nez...

    Toute la raison de ce topic repose là-dessus.

    Par expérience, ma printeuse détecte automatiquement pas trop mal la fin en hauteur des dimensions < au A4.

    Mais il parait que pour faire "plus propre" faut déterminer la hauteur de la fiche à printer.

    J'ai aussi installé la lib de classe ZPrinters, mais je bute sur le .StartDoc; pas moyen de le placer.

    Je ne désepère pas, en cherchant je trouve plein de trucs très intéressants qu'en cherchant auparavant ; je n'avais trouvé

    Merci de ce petit mot.

    @+

    JP

  6. #26
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    oui en effet je printe aux tests au delà des limites que j'impose sur le code, justement pour voir si la limitation de la méthode est effective :
    Justement, je ne crois pas à l'utilité de ce "test".

    C'est à toi de gérer l'impression dans les limites et le changement page sachant que tu peux justement connaître la longueur maximale avec le code précédent.

  7. #27
    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,

    sfpx, oui là je suis un peu frustré ; comment faire alors pour tester si ce code est efficace ou non ?

    Je vais encore un peu attendre et si pas de nouvelle je vais mettre ce post en "Délestage".


  8. #28
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    au passage, il doit y avoir une petite confusion entre la hauteur des pages, en 10° de mm, et les X et Y du Canvas, qui doivent s'exprimer en pixels

    pour passer de l'un à l'autre, il faut faire intervenir la résolution de l'imprimante, je suppose

    et sachant que le Canvas représente la page à imprimer => tu ne peux pas en sortir !!!
    Description

    Canvas represents the printing surface of a page.
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  9. #29
    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 Tourlourou,

    D'après toi, je recherche la formule de la quadrature du cercle :


  10. #30
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    dans ce tuto :
    http://alphomega.developpez.com/imprimer/?page=page_3
    sont décrites des fonctions qui permettent d'accéder à la résolution... grâce à GetDeviceCaps()
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  11. #31
    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,

    Oui tourlourou, mais tu penses que je commence à le connaître par coeur le super tuto à Jean-Luc

    L'API en question retourne plein de paramètres de la feuille qui vient d'entrer dans la printeuse et non qui peut stipuler telle ou telle dimension X, Y à printer.

    Autrement dit, cela se passe en passif et non en actif, un peu comme si tu manges une orange, tu vas dire, miammmm petit goút acidulé.

    Mais pas possible de pouvoir demander qu'il te tombe dans le bec un morceau d'ananas

    Enfin si j'ai bien compris tout ce que j'avais lu et relu.

    Merci à toi d'avoir tenté de m'aider 8)

    Pas beaucoup de "grosses pointures" sont venues ici en ce topic, alors j'en déduis que je suis sur une fausse piste.

  12. #32
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    yes, ;-)

    mais cette api permet de capter la résolution de l'imprimante après avoir modifié les variables de page... à l'aide des codes de sfpx ce qui aide pê à se situer le canevas de la page à imprimer ?

    sinon, pour l'orange et l'ananas, plutôt en cocktails ou punch !
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  13. #33
    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
    Bonsoir,

    Tourlourou, alors tu ne lâches jamais hein

    Je vais voir ça - un peu plus tard - si je peux enfin tirer du concret de tout ça.

    En ce moment je suis sur un autre topic tout aussi brúlant 8)

    Oui tu le connais aussi.

    Je place sous le coude ce topic, mais pas pour reculer.

    Enfin si, mais pour ensuite mieux prendre mon élan

    Encore merci @ +

    Jean-Pierre

    PS : Cocktail ? pour toi et les personnes qui liront ce topic :

  14. #34
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Format papier d'imprimante
    Bonjour J-P

    J'ai le meme probleme que toi, je ne peux regler le format du papier sans passer par PrinterSetUp Dialog.

    J'ai essaye pas mal de solution mais rien ne fonctionne. Depuis decembre 2005 a tu eu la solution de ce probleme.

    Merci.
    Jean un quebecois dans le malheur et dans la neige.

  15. #35
    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,

    Bresse, pour te répondre, je n'ai pas pris de temps de creuser à fond en ce sens.

    Tu peux regarder là pour complément ilustré d'infos.

    Ce petit bout de code peut aussi t'aider un peu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    var ResX, ResY&#58; Integer ;
    begin
      ResX &#58;= GetDeviceCaps &#40;Printer.handle, LOGPIXELSX&#41; ;
      Edt_L_Page.Text &#58;= IntToStr&#40;ResX&#41;;
     
      ResY &#58;= GetDeviceCaps &#40;Printer.handle, LOGPIXELSY&#41; ;
      Edt_H_Page.Text &#58;= IntToStr&#40;ResY&#41;;
    ...
    Ce qui te donnera une largeur et une hauteur...

    En effet, ce problème n'est pas aussi facile qu'il n'y paraît.

    Bon courage

  16. #36
    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,

    Affaire résolue, merci à tous et surtout à waskol

    http://www.developpez.net/forums/vie...661420#2661420

  17. #37
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    De rien
    Bidouilleuse Delphi

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Impression sans boite de dialogue
    Par lodizzz dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/06/2012, 13h09
  2. Réponses: 6
    Dernier message: 06/11/2010, 08h34
  3. Réponses: 2
    Dernier message: 09/01/2007, 11h21
  4. Comment "sauver sous" sans boîte de dialogue ?
    Par CAMIC dans le forum VBA Access
    Réponses: 1
    Dernier message: 01/11/2006, 16h44
  5. Réponses: 1
    Dernier message: 08/12/2005, 11h14

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