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 :

ouverture d'un tiroir caisse avec pilote imprimante installé


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 91
    Points : 54
    Points
    54
    Par défaut ouverture d'un tiroir caisse avec pilote imprimante installé
    Bonjour,
    Voila j'ai un imprimante thermique installé sur un PC.
    j'utilise les pilotes pour imprimer.
    je voudrai savoir si on peu envoyer une séquence ESCAPE à l'imprimante pour que le tiroir s'ouvre sans passer par l'envoie de données sur le port puisque celui si est occupé par le pilote.

    exemple de code que j'ai testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
    Imp : TextFile;
    begin
    AssignPrn(Imp);
    Rewrite(Imp);
    WriteLn(imp,Chr(27) + chr(112) + chr(48)+chr(53) + chr(53)); 
    CloseFile(Imp);
    end;
    Merci d'avance pour votre aide.
    bonne journée

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 712
    Points : 13 179
    Points
    13 179
    Par défaut
    Avec les imprimantes Epson (TM-T88xxx) par exemple, tu as une police control (à mettre à 10pt) pour piloter le tirroir caisse.

    Il suffit allors de faire un Printer.Canvas.TextOut .

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 91
    Points : 54
    Points
    54
    Par défaut
    merci pour ta réponse

    j'ai donc fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Printer.canvas.font.name := 'control';
    Printer.canvas.font.size := 10;
    Printer.Canvas.TextOut(0,0,Chr(27) + chr(112) + chr(48)+chr(53) + chr(53));
    il me dit l'imprimante n'imprime pas pour l'instant.

    si je met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AssignPrn(Imp);
    Rewrite(Imp);
     
    CloseFile(Imp);
    autour il me sort une petite bande de papier

  4. #4
    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
    Salut,

    il me dit l'imprimante n'imprime pas pour l'instant.
    Il me semble bien que ce message arrive lorsque l'impression est lancée, mais que le pilote ne détecte aucune impression en son canvas de printage.

    En plus tout ça est lié à la dépendance du type de pilote, par rapport à la marque d'imprimante

    @+

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 712
    Points : 13 179
    Points
    13 179
    Par défaut
    Citation Envoyé par Chayanne47 Voir le message
    il me dit l'imprimante n'imprime pas pour l'instant.
    Il manque un Printer.BeginDoc et un Printer.EndDoc.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 91
    Points : 54
    Points
    54
    Par défaut
    j'ai bien mis un Printer.BeginDoc et un Printer.EndDoc.
    mais il m'imprime une bande de 1.5 cm
    avec rien dessus

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 712
    Points : 13 179
    Points
    13 179
    Par défaut
    Je te donnais un exemple pour les imprimantes Epson. Je ne peux que te suggérer de regarder la doc de ton imprimante !

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    quelque chose comme ça peut-être?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    const
        OPEN_CODE=Chr(27) + chr(112) + chr(48)+chr(53) + chr(53);
    begin
        Escape(Printer.Handle,PASSTHROUGH,length(OPEN_CODE),OPEN_CODE,nil);
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 91
    Points : 54
    Points
    54
    Par défaut
    Merci pour vos réponses,

    j'ai testé mais il me renvoie un message d'erreur :
    la zone de données passée à un appel système est insuffisante

    voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    OPEN_CODE:=Chr(27) + chr(112) + chr(48)+chr(53) + chr(53);
     
    Printer.PrinterIndex := Printer.Printers.IndexOf('EPSON TM-T88IV');
     
    Escape(Printer.Handle,PASSTHROUGH,length(OPEN_CODE),OPEN_CODE,nil);
     
    Showmessage(SysErrorMessage(GetLastError));

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 712
    Points : 13 179
    Points
    13 179
    Par défaut
    Mais as-tu essayé simplement ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Printer.BeginDoc;
    Printer.Canvas.Font.Size := 10;
    Printer.Canvas.Font.Name := 'control';
    Printer.Canvas.TextOut(0, 0, 'A');
    Printer.EndDoc;
    'A' étant le code d'ouverture du tiroir, 'G' l'impression du premier logo contenu en flash ram, 'H' du deuxième, etc.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 91
    Points : 54
    Points
    54
    Par défaut
    salut,
    merci pour ta réponse
    alors cela fonctionne mais il me sort une petite bande de papier de 6 mm
    à cause du enddoc

    y a t il un paramètre car je n'ai pas trouvé

    merci

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 712
    Points : 13 179
    Points
    13 179
    Par défaut
    Well... Appelons ça un dommage collatéral

    Mais si tu inclus le changement de police et l'envoi du code à la fin de l'impression du ticket de caisse (le même bloc BeginDoc...EndDoc), tu n'y verras que du feu. Une ou deux fois par jour (peut-être) lors de l'ouverture manuelle du tiroir, ben tu perdras 6mm sur ton rouleau de 50m

    Maintenant, si tu te sens concerné par ces 6mm, depuis la TM-T88II et le driver Advanced (OPOS ADK), tu peux aussi gérer l'imprimante (et les périphériques connectés: tiroir, afficheur) par automation: TOPOSPOSPrinter, TOPOSCashDrawer et TOPOSLineDisplay. Mais c'est légérement plus compliqué...

  13. #13
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    pour une imprimante "TM@IURI With Cut" parallèle, voilà le code, et il ne sort aucun boue de papier:
    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
     
      TStrucPrinter=record
           bufl:word;
           buff:array[0..255] of char;
        end;
     
    Procedure OpenTiroir;
    var
          test:Integer;
          bu:TStrucPrinter;
    const
         fc1=#27+'@'+#27+'p'+#0+#16+#32+#27+'@';
    begin
          test:= PASSTHROUGH ;
     
          if Escape(Printer.Handle,QUERYESCSUPPORT,sizeof(test),@test,nil)=0 then
            exit;
          Printer.SetPrinter(pchar(NamPrinter),'WINSPOOL',nil,0);
          Printer.BeginDoc;
          StrPCopy(bu.buff,FC1);
          bu.bufl:=StrLen(bu.buff);
          Escape(Printer.Handle,PASSTHROUGH,0,@bu,nil);
          Printer.EndDoc;
    end;
    voir aussi
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

Discussions similaires

  1. Tiroir Caisse, Imprimante à Ticket
    Par cflo56 dans le forum Périphériques
    Réponses: 3
    Dernier message: 09/10/2011, 13h21
  2. Ouverture d'un tiroir caisse
    Par cmembre dans le forum Composants VCL
    Réponses: 1
    Dernier message: 26/09/2010, 21h45
  3. commande ouverture tiroir caisse par port USB
    Par Pascal88pm dans le forum 4D
    Réponses: 1
    Dernier message: 31/08/2010, 11h41
  4. Impression avec une imprimante à ticket de caisse
    Par freud dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 13h50
  5. ouverture d'un tiroir-caisse
    Par 2nis dans le forum VBA Access
    Réponses: 4
    Dernier message: 16/06/2006, 17h48

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