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 :

Ouvrir tiroir d'une epson à ticket


Sujet :

Langage Delphi

  1. #1
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut Ouvrir tiroir d'une epson à ticket
    Bonjour à tou(te)s

    Je suis encore et toujours sur mon code d'imprimante à ticket.
    L'impression ne pose plus de problème mais je dois avoir une fonction pour ouvrir le tiroir-caisse.
    J'ai déjà trouvé ici quelques morceaux de code pour faire ça le plus simple me semblait être le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure OpenCashDrawer(PrinterName: string; Methode: string);
    const
      OPEN_CODE: ansistring = Chr(27) + Chr(112) + Chr(48) + Chr(25) + Chr(250);
    begin
     
        Escape(TPrinterWin(Printer).Handle, PASSTHROUGH, Length(OPEN_CODE),
           PAnsiChar(OPEN_CODE), nil);
    Problème: ça me renvoie une jolie violation d'accès:

    ---------------------------
    Notification des exceptions du débogueur
    ---------------------------
    Le projet truc.exe a déclenché la classe d'exception $C0000005 avec le message 'access violation at 0x77272373: write of address 0x0096e3e0'.
    ---------------------------
    Arrêter Continuer Aide
    ---------------------------
    Je sais que je suis sous Firemonkey mais l'application est en version Windows.

    Qu'est-ce qui cloche la-dedans à votre avis ?

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    essai avec ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      Str: AnsiString;
      Len: Word;
    begin
      Str := '??' + #27'@' + #27'p07y'; // Taille + Reset + Drawer
      Len := Length(Str);
      Move(Len, Str[1], 2);
      Escape(Printer.Handle, PASSTHROUGH, 0, @Str[1], nil);
    end;
    tu peux aussi passer par un record
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    type
      TOpenDrawer = packed record
        Len   : Word; // SizeOf(TOpenDrawer)
        Reset  : array[0..1] of Byte; // #27 '@'
        Drawer : array[0..5] of Byte; // #27'p07y'
      end;
    tu peux aussi tenter ceci mais je ne sais pas ce que ça va donner en Unicode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        with Printer do
        begin
          Title := 'Ouverture tiroir';
          BeginDoc;
          Canvas.TextOut(0, 0, #27'p07y');
          EndDoc;
        end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    La solution avec ESCAPE ne provoque aucune erreur mais le tiroir reste obstinément fermé.

    Avec Canvas.Textout, ça imprime une bande de papier mais c'est tout.

    Le seul code bien connu et fonctionnel pour le moment est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      Printer.PrinterIndex := Printer.Printers.IndexOf(ParamStr(1));
      Printer.BeginDoc;
      Printer.Canvas.Font.Name := 'control';
      Printer.Canvas.Font.Size := 10;
      Printer.Canvas.TextOut(0, 0, AnsiString('A'));
      Printer.EndDoc;
    Mais là aussi, ça imprime une bande de papier inutile qui ne me gène pas mais qui va forcément faire l'objet d'une réflexion du client.


    petite précision ....

    Le soft de base étant écrit avec Firemonkey, le code ci-dessus en fonctionne pas dans le programme. En fait, j'ai fait un exe version VCL qui ne fait que l'ouverture du tiroir et que je lance depuis mon application principale. C'est lourdingue mais je n'ai pas trouvé d'autre solution pour le moment.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    as-tu un Delphi < 2009 pour tester en version non-Unicode ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    je dois avoir un 2007 qui traine .... J'essaie demain

  6. #6
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Je viens de tenter avec delphi 7.

    Même résultat ! :-(

    Quelle galère ces imprimantes à ticket ...................

    Y'a pas un SDK style DLL pour piloter tout ça ?

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    ah mais en relisant mon code il manque des choses

    il faut passer par BeginDoc/EndDoc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
          Printer.Title := 'Ouverture tiroir';
          Printer.BeginDoc;
          Len := Length(Str);
          Str := '??' + Str;
          Move(Len, Str[1] , 2);
          Escape(Printer.Handle, PASSTHROUGH, 0, @Str[1], nil);
          Printer.EndDoc;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Effectivement, ça fonctionne mieux comme ça mais je conserve la petite bande de papier imprimée.

    Le client s'en accordera ... Je vais pas y passer l'été :-)

    Merci Paul

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Y'a pas un SDK style DLL pour piloter tout ça ?
    Par interface oui, c'est inclus dans le Epson OPOS ADK.

Discussions similaires

  1. [XL-2010] Ouvrir un tiroir caisse bixolon bc410 relie a une imprimante ticket boxolon srp 350II
    Par norman5 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/02/2014, 17h12
  2. Quelqu'un a-t-il une Epson Stylus Color 880? (Question sur l'encre)
    Par annedeblois dans le forum Périphériques
    Réponses: 6
    Dernier message: 03/05/2006, 13h53
  3. [Report] Ouvrir un report une query source paramétrée
    Par Julien Dufour dans le forum Access
    Réponses: 5
    Dernier message: 27/03/2006, 16h23
  4. [Struts javascript] ouvrir plusieurs fois une popup
    Par jc_romeo dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/03/2006, 09h36
  5. delphi/paradox : ouvrir deux fois une table
    Par lux dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/12/2005, 09h47

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