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

Outils Delphi Discussion :

Imprimante à ticket EPSON


Sujet :

Outils Delphi

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 133
    Points
    13 133
    Par défaut
    Toujours dans la même doc page 5, les codes d’échappement pour l'ouverture du tiroir sont légèrement différents : 27,112,0,25,250.

    MelanieS pourra certainement confirmer tout cela prochainement puisqu'elle est équipée

  2. #22
    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 445
    Points
    28 445
    Par défaut
    je viens de découvrir qu'on peut en fait envoyer tout cela directement sur le port 9100 de l'imprimante, j'ai pu imprimer un bitmap avec idTCPClient sans passer par le driver imprimante qui ne sert plus à rien du coup
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #23
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    J'arrive un peu tard sur le sujet (retour de vacances et problèmes de reprise oblige ) .
    J'ai eu affaires avec une imprimante EPSON TM également mais une H6000III
    toute mes impressions ont été faites par les fameuses OPOS , le seul problème que j'ai rencontré concernait la partie Edition de chèques impossible de régler correctement la taille du papier

    Ta nouvelle note ,Paul , m'ouvre de nouvelles perspectives !!
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #24
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    Bonsoir !

    Et avant toute chose, je vous remercie tous sincèrement de vos réponses et de vos conseils ! Tout commence à s'éclairer


    J'ai essayé de fignoler les bouts de codes que vous m'avez donné.
    Je n'ai malheureusement ni la caisse ni l'imprimante avec moi ce soir...

    Pensez-vous que ce code est susceptible de fonctionner ?
    Enfin..Que je ne fais pas de (trop) grossières erreurs ?

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    procedure Tpage_accueil.FormCreate(Sender: TObject);
    var
      Index : integer;
    begin
      ComboBox1.Items.Assign(Printer.Printers);
      Index := ComboBox1.Items.IndexOf('EPSON TM-T88V Receipt');
      if (Index < 0) and (ComboBox1.Items.Count > 0) then
        Index := 0;
      ComboBox1.ItemIndex := Index;
    end;
     
     
    procedure Tpage_accueil.Imprimer();
    // record qui gère l'ouverture de la caisse
    const
      cmd: record
        len: Word;
        esc: array[0..4] of Char;
      end = (
        len: 5;
        esc: #27'p07y' // <Esc>p0, t1, t2  : Drawer Kick
      );
    begin
    // Sélection imprimante
      Printer.PrinterIndex := Printer.Printers.IndexOf('EPSON TM-T88V Receipt');
     
    // Début d'envoi à l'impression
      Printer.BeginDoc;
     
    // Écriture du ticket de caisse
     
      Printer.Title := 'Facture';
      Printer.Canvas.Font.Name := 'Arial';
      Font.Size := 8;
     
      Printer.Canvas.Textout('longueur', 'largeur', 'Facture Numéro [...]');
      Printer.Canvas.Textout('longueur', 'largeur', 'Rue de [...]');
      Printer.Canvas.Textout('longueur', 'largeur', 'Horaires : [...]');
      Printer.Canvas.Textout('longueur', 'largeur', 'Tel : [...]');
      Printer.Canvas.Textout('longueur', 'largeur', 'Date : ' + Now);
     
      Printer.Canvas.Textout('longueur', 'largeur', 'Article 1 - Prix x');
      Printer.Canvas.Textout('longueur', 'largeur', 'Article 2 - Prix y');
     
      Printer.Canvas.Textout('longueur', 'largeur', 'Total : [...]');
      Printer.Canvas.Textout('longueur', 'largeur', 'Merci de votre visite');
     
    // Ouverture du tiroir caisse
      Printer.Canvas.Font.Name := 'control';
      Printer.Canvas.Font.Size := 10;
     
    // Découpe du papier
      Escape(Printer.Handle, PASSTHROUGH, 0, @cmd, nil);
     
    // Fin d'envoi à l'impression
      Printer.EndDoc;
    end;
    Les "longueurs" et "largeurs" sont la position des textes sur le ticket.
    Je n'ai pas encore la manière de gérer cela, sauf de celle que tu m'as donnée.

  5. #25
    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 445
    Points
    28 445
    Par défaut
    bon alors, le code dans le OnCreate je l'ai mis pour pouvoir choisir une imprimante via un ComboBox...du coup il faut prendre ComboBox1.ItemIndex dans le Button1Click et non l'IndexOf(...) sinon ça sert à rien

    la Police "Control" fait double emploi avec le PASSTHROUGH, c'est soit un "A" en police Control 10, soit un PASSTHROUGH mais pas les deux.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #26
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Voici un zip contenant des tests (=> peu de commentaires) que j'avais fait à l'époque
    il y a bien sur un peu de tout mais surtout les 2 modes de connexion à l'imprimante (via driver ou port com) faudrait que j'y ajoute la méthode de Paul
    (quand j'aurais le temps )

    mes excuses par avance , cela date de début 2012 donc je ne me rappelle plus exactement tout

    Serge
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #27
    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 445
    Points
    28 445
    Par défaut
    Bonjour,

    Je me suis rendu chez un client ce matin pour tester, la séquence #27'p07y' fonctionne effectivement.

    Mais je suis allé plus loin que ça

    J'ai réalisé une petite application de démonstration qui m'a permis de :
    1) retrouver automatiquement les imprimantes réseau
    2) imprimer du texte
    3) imprimer un bitmap
    4) imprimer un code bar
    5) couper le papier
    6) ouvrir le tiroir caisse

    et tout cela sur un PC sans aucun driver EPSON installé !

    Nom : EpsonReceiptD6.png
Affichages : 1853
Taille : 28,1 Ko

    J'ai même pu intervenir sur la configuration de l'imprimante et lui ajouter une localisation et un administrateur. Mais en fait je peux aussi reconfigurer la partie réseau, la seule contrainte étant que l'imprimante doit dès le départ avoir une adresse IP compatible avec celle du PC, or il me semble que ces imprimantes sont livrées sans DHCP et avec une adresse IP fantaisiste.

    Nom : EpsonReceiptD6b.png
Affichages : 2168
Taille : 19,3 Ko

    Tout cela avec des imprimantes EPSON TM T88V, si vous avez un autre modèle en IP, je serais curieux de savoir comme réagit le programme.

    Vous pouvez télécharger le programme Delphi 6 compilé (sans les sources) à cette adresse.

    Je n'ai pas encore décidé de ce que j'allais faire de cette solution... pour l'instant les sources ne sont pas disponibles.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #28
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Paul TOTH Voir le message
    Tout cela avec des imprimantes EPSON TM T88V, si vous avez un autre modèle en IP, je serais curieux de savoir comme réagit le programme.
    Hélas celle que j'ai sous la main n'est qu'en RS232
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #29
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    Bonsoir,

    Navrée de ne répondre que maintenant.
    Ma version de DELPHI a rendu l'âme samedi dernier et j'ai dû réinstaller Delphi 7 sauf que le programme ne fonctionnait plus (perte d'une grande partie du code).

    J'ai pu tout rapidement ré-écrire.
    Et je me retrouve à mon point initial.

    L'impression !

    Merci de ta "correction" de mon bout de code, Paul, je vais reprendre tout ça.

  10. #30
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    Ah voilà, j'avais une question que je voulais poser juste avant mon problème de delphi.

    la Police "Control" fait double emploi avec le PASSTHROUGH, c'est soit un "A" en police Control 10, soit un PASSTHROUGH mais pas les deux.
    La police control et le passthrough, l'un est pour la découpe du papier et l'autre est pour l'ouverture de caisse, non ?
    Ou alors j'ai pas tout pigé...


    Ok, je déclare la constante pour la découpe du papier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const
      cmd: record
        len: Word;
        esc: array[0..4] of Char;
      end = (
        len: 5;
        esc: #27'p07y' // <Esc>p0, t1, t2  : Drawer Kick
      );
    Et c'est uniquement là que j'utilise la constance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Escape(Printer.Handle, PASSTHROUGH, 0, @cmd, nil);

    J'suis désolée, je comprend vite, mais faut m'expliquer longtemps ! :calim2:

  11. #31
    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 445
    Points
    28 445
    Par défaut
    Citation Envoyé par MélanieS Voir le message
    La police control et le passthrough, l'un est pour la découpe du papier et l'autre est pour l'ouverture de caisse, non ?
    tu peux tout faire en passthrough, et probablement tout faire avec la police Control.

    En fait, le but c'est d'envoyer une séquence de caractères à l'imprimante

    le mode passthrough demande au driver de ne toucher à rien et d'envoyer la séquence qu'on a défini directement à l'imprimante.

    La police "Control" c'est ce que propose EPSON pour simplifier les choses, le caractère "A" est remplacé par la séquence d'ouverture du tiroir...pour couper le papier c'est F ou P (voir ici).

    L'avantage du mode passthrough, c'est qu'il fonctionne avec n'importe quel driver d'imprimante (puisqu'on lui dit de ne toucher à rien), alors que si la police Control n'est pas présente la seconde solution ne fonctionnera pas. L'inconvénient c'est qu'il faut connaître les séquences d'échappement qui ne sont pas forcément les mêmes d'un modèle à l'autre...je suppose que la police Control se charge de ce détail.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  12. #32
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    D'accord.
    Donc en fait, l'une des méthodes vaut l'autre.
    Il n'y en a pas réellement de meilleure.

    Normalement, il devrait y avoir une imprimante unique.

  13. #33
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    Tiens...Un autre souci me vient dans mon code.
    J'ai un bouton "Insérer dans la facture", qui est sensé ajouter l'élément sélectionné dans mon TListView au ticket d'impression.

    Mais cela me cause un souci que je comprend tout à fait, mais que je ne sais pas comment résoudre.
    En effet, si j'ajoute le Printer.Canvas, il me dit que l'imprimante n'imprime pas pour l'instant parce que l'impression n'est pas encore commencée..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.BtInsererClick(Sender: TObject);
    var
       Selection : string;
    begin
       Nom  := ListView.Items[ListView.ItemIndex].Caption;
       Prix := StrToFloat(ListView.Items[ListView.ItemIndex].SubItems[0]);
     
       Selection := Nom  + ' ' + FloatToStr(Prix) + ' CHF';
       //Printer.Canvas.Textout(10, 10, Selection);
    end;
    Ici, la partie article est sensée être ce que j'ajoute depuis mon bouton Insérer..

    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
    procedure TForm1.Imprimer();
    const
      cmd: record
        len: Word;
        esc: array[0..4] of Char;
      end = (
        len: 5;
        esc: #27'p07y' // <Esc>p0, t1, t2  : Drawer Kick
      );
    begin
     
    // Sélection imprimante
      Printer.PrinterIndex := Printer.Printers.IndexOf('EPSON TM-T88V Receipt');
     
    // Début d'envoi à l'impression
      Printer.BeginDoc;
     
    // Écriture du ticket de caisse
      Printer.Title := 'Facture';
      Printer.Canvas.Font.Name := 'Arial';
      Font.Size := 8;
     
      EnteteFacture();
     
      Printer.Canvas.Textout(10, 10, 'Article 1 - Prix x');
      Printer.Canvas.Textout(10, 10, 'Article 2 - Prix y');
     
      PiedFacture();
     
    // Découpe du papier +  impression
      Escape(Printer.Handle, PASSTHROUGH, 0, @cmd, nil);
     
    // Fin d'envoi à l'impression
      Printer.EndDoc;
    end;
    Comment puis-je faire, donc, pour ajouter mes articles à la facture depuis mon bouton "Insérer" ?

    Je galère là dessus...

  14. #34
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    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 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Soit on n'élabore l'impression qu'une fois la facture totalement composée (cad ses éléments tous connus), soit on débute l'impression en ouvrant le canevas et y collant les lignes voulues, puis d'autres dans le bouton insérer par exemple, et on clôture la facture par un clic sur le bouton finaliser/imprimer (cela suppose que le canevas soit accessible à partir de tous les boutons qui devront travailler dessus).
    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 !

  15. #35
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    Merci de ta réponse.

    Je viens de passer quelques heures à me faire une espèce de logique et j'ai fini par presque totalement modifier mon code

    En voici une partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    // Je lance le début de l'impression (sûrement là où ça pose problème..)
      EnteteFacture();
      Printer.PrinterIndex := Printer.Printers.IndexOf('EPSON TM-T88V Receipt');
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.EnteteFacture();
    begin
    // L'entête de ma facture
    Printer.BeginDoc;
      Printer.Canvas.Textout(10, 10, 'Nom de la boutique');
      Printer.Canvas.Textout(10, 10, 'Adresses');
      Printer.Canvas.Textout(10, 10, 'Horaires');
      Printer.Canvas.Textout(10, 10, 'Téléphone');
      Printer.Canvas.Textout(10, 10, ' ');
      Printer.Canvas.Textout(10, 10, DateToStr(Now));
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.PiedFacture();
    begin
    // La fin de la facture ainsi que l'envoi à l'imprimante.
      Printer.Canvas.Textout(10, 10, 'Total à payer : ');
      Printer.Canvas.Textout(10, 10, 'Espèces : ');
      Printer.Canvas.Textout(10, 10, 'À rendre : ');
      Printer.Canvas.Textout(10, 10, ' ');
      Printer.Canvas.Textout(10, 10, 'Merci de votre visite');
      Escape(Printer.Handle, PASSTHROUGH, 0, @cmd, nil);
    Printer.EndDoc;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.BtInsererClick(Sender: TObject);
    begin
    // Articles que j'ajoute au fur et à mesure à ma facture
       Nom  := ListView.Items[ListView.ItemIndex].Caption;
       Prix := StrToFloat(ListView.Items[ListView.ItemIndex].SubItems[0]);
     
       Selection := Nom  + ' ' + FloatToStr(Prix);
       Printer.Canvas.Textout(10, 10, Selection);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.BtPaiementClick(Sender: TObject);
    begin
    // Fin du programme, j'imprime la facture.
        PiedFacture();
    end;
    Mais au lancement de l'application, j'ai une erreur qui ne bloque pas le programme pour autant mais le fait planter.

    La projet a provoqué une classe d'exception EPrinter avec le message "Impression en cours". Processus stoppé.
    Comme je le penses bien, l'erreur vient de mon FormCreate, mais dans ce cas-là, je ne vois pas trop comment le résoudre.

  16. #36
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    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 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Je pense qu'il suffit d'inverser les 2 lignes pour sélectionner l'imprimante active avant de démarrer l'impression...
    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 !

  17. #37
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    ....J'ai honte...

    J'me sens tellement nulle, sur le coup

    Merci infiniment, Tourlourou.
    Il ne me reste plus qu'à aller tester mon petit programme.

    Je viendrais vous tenir au courant.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 133
    Points
    13 133
    Par défaut
    Et comment fais-tu si le(la) client(e) ne veut plus un article, veut payer avec une carte de crédit, voire plusieurs modes de payement

    A part ça, il faudrait peut-être calculer un décalage en Y, toutes tes lignes sont superposées

  19. #39
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    En fait, j'attend d'être devant l'imprimante pour faire les réglages concernant l'allure de la facture (où seront les éléments dans la facture).

    Quant aux modes de paiement, il n'y a pas d'appareils pour les cartes, donc, dans l'idéal, c'est cash (c'est un programme de gestion de caisse pour salon de coiffure. Ce sont donc des prix choisis par le patron et ce sont des chiffres ronds. )

    J'ai déjà géré un bouton "Annuler" mais il est vrai qu'il était fonctionnel lorsque je n'avais qu'un memo où j'indiquais toutes mes informations. Il suffisait de vider ce dernier.
    A présent, il va falloir que je gère la création d'une "nouvelle" facture, et donc, la remise à zéro de l'impression.

  20. #40
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    Édit, j'ai pensé à simplement fermer l'impression dés que j'appuie sur le bouton "recommencer" et de la relancer ensuite. Mais ceci ne fonctionne QUE si je n'ai pas encore appuyé sur le bouton "paiement", sinon, cela me remet l'erreur
    l'imprimante n'imprime pas pour l'instant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.BtAnnulerClick(Sender: TObject);
    begin
      Printer.EndDoc;
      Total := 0;
      EdTotal.Text := '0';
      EdEspeces.Text := '0';
      EdARendre.Text := '0';
      BtInserer.Enabled := true;
      BtPaiement.enabled := false;
      EnteteFacture();
    end;
    Suis-je bête !
    Quand j'appuie sur le bouton paiement, je ferme DÉJA, l'impression.
    C'est pour ça que si je la ferme de nouveau dans le bouton annuler, cela génère une erreur.

    J'ai réglé le problème avec une variable boolean déterminant si la facture a déjà été "terminée" ou non.

Discussions similaires

  1. Partage d'une imprimante ticket
    Par JP.NUAGE dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 22/07/2008, 01h04
  2. Impression avec une imprimante à ticket de caisse
    Par freud dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 13h50
  3. Réponses: 2
    Dernier message: 21/03/2008, 09h16
  4. Imprimer sur Imprimante ticket
    Par clo5000 dans le forum Access
    Réponses: 5
    Dernier message: 08/03/2008, 07h44
  5. Débutant : performances imprimantes ticket
    Par OlivierC69 dans le forum Access
    Réponses: 1
    Dernier message: 03/08/2006, 13h27

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