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 FMX Delphi Discussion :

FMX: Changer le papier d'une imprimante à ticket [Windows]


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut FMX: Changer le papier d'une imprimante à ticket
    Bonjour les gens,

    Toujours dans mon impression de tickets sous FMX ...
    J'ai résolu la majeure partie des problèmes rencontrés mais je coince sur un dernier : la hauteur du papier.
    Bêtement, je pensais que la hauteur était "infinie" vue la longueur du rouleau ....
    Mais, comme j'utilise le canvas pour imprimer, j'ai une largeur de 512 que je maitrise et une hauteur de .... 2104
    Problème, si mon ticket comporte beaucoup de lignes, j'en ai qu'un morceau à l'arrivée.
    Etant pour l'instant sous Windows uniquement, j'ai tenté le code suivant:

    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
     
      procedure SetupPrinter(PaperWidth, PaperLength, PaperSize: Integer);
      var
        ADevice, ADriver, APort: array [0 .. 255] of char;
        DevMode: THandle;
        PtrDevMode: PDevMode;
        PDev: TPrinterDevice;
      begin
        PDev := Printer.ActivePrinter;
        TPrinterWin(Printer).GetPrinter(ADevice, ADriver, APort, DevMode);
        if DevMode <> 0 then
        begin
          PtrDevMode := GlobalLock(DevMode);
          with PtrDevMode^ do
          begin
            //strcopy(dmDevicename, ADevice);
            StrCopy(dmDevicename, ADevice);
            dmFields      := dmFields or DM_PAPERWIDTH or DM_PAPERLENGTH or DM_PAPERSIZE;
            dmPaperWidth  := PaperWidth;
            dmPaperLength := PaperLength;
            dmPaperSize   := PaperSize; // for custom
          end;
          GlobalUnlock(DevMode);
          Printer.ActivePrinter := PDev;
        end;
      end;
    Mais ça ne fonctionne pas . Mon canvas a toujours la même hauteur.


    Z'auriez une idée pour changer ça ?

    Précision: Je ne peux pas imprimer en mode texte parce que je dois imprime aussi des code-barres et des logos.

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    ça te fait déjà un ticket de 30cm de long

    ne peux tu pas enchaîner deux pages d'impression sans couper le papier ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Oui bien sur, ça fait déjà un joli ticket ... mais imagine un ticket de supermarché un jour de soldes

    En fait, au début, je n'ai pas pensé à ce problème, imaginant qu'un imprimante à ticket pouvait une longueur "illimitée" .
    Et un test client hier a enchainé un ticket de caisse avec un ticket d'avoir. et c'est là qu'on s'est rendu compte du problème.

    Pour l'instant, j'ai résolu par un enddoc/begindoc avant le ticket d'avoir qui coupe le papier.

    Il est vrai que je n'ai pas essayé le NewPage en remplacement. Peut-être qu'il ne coupera pas le papier à ce moment.
    Je testerai demain au bureau.

    Je pensais à pouvoir changer le papier comme on le voit dans les propriétés de l'imprimante. La dernière possibilité dans la liste proposée serait largement suffisante mais impossible de trouver comment sélectionner cette option avec Delphi.

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    Sauf à enchaîner les pages sans coupure du papier, comme le suggérait Paul, pour fixer la hauteur de la page (dmPaperLength, en 1/10émes de millimètres), il faudrait connaître la hauteur du canevas nécessaire au ticket (donc utiliser un canevas annexe de dimension "infinie") et la résolution verticale (dmYResolution), non ? Et fixer dmPaperSize à 0 ?
    Delphi 5 Pro - Delphi 11.3 Alexandria 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 !

  5. #5
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Je vais essayer l’enchaînement de pages et je reviendrai donner le résultat.

    Merci pour votre contribution

  6. #6
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Première bonne nouvelle : le newpage ne coupe pas le papier.

    Je n'ai plus qu'à adapter mon code à ce comportement pour changer ma position Y si je dépasse le max.

    Merci encore

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

Discussions similaires

  1. [WD14] Impression sur une imprimante à tickets
    Par sousana_fly dans le forum WinDev
    Réponses: 3
    Dernier message: 20/10/2010, 18h50
  2. Partage d'une imprimante ticket
    Par JP.NUAGE dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 22/07/2008, 01h04
  3. Comment changer les droits sur une imprimante reseau
    Par matdecalf dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/06/2008, 09h43
  4. Impression avec une imprimante à ticket de caisse
    Par freud dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 13h50
  5. Réponses: 7
    Dernier message: 28/08/2006, 09h57

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