[RESOLU] Imprimer un ticket de caisse
[RESOLU] Imprimer un ticket de caisse
Bonsoir,
Je viens juste de terminer un logiciel de vente au comptoir. Il fonctionne bien à part l'impression qui ne marche pas sur l'imprimante-caisse utilisant un rouleau de papier de 7cm de largeur. Par contre, sur A4, le ticket de caisse est bien imprimé mais sur le papier en rouleau, rien ne s'imprime. Quelqu'un a déjà utilisé une imprimante de caisse?
Merci
Je viens juste de terminer un logiciel de vente au comptoir. Il fonctionne bien à part l'impression qui ne marche pas sur l'imprimante-caisse utilisant un rouleau de papier de 7cm de largeur. Par contre, sur A4, le ticket de caisse est bien imprimé mais sur le papier en rouleau, rien ne s'imprime. Quelqu'un a déjà utilisé une imprimante de caisse?
Merci
Dernière modification par omega le mer. 15/déc./2021 15:50, modifié 2 fois.
Win7 (x64) 64 bits Pb 5.72
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Imprimer un ticket de caisse
Quel est le constructeur et le type d'imprimante ?
Comment est elle connectée ?
Est elle visible dans les options d'impression ?
Tu vas peut être devoir utiliser des Esc commands pour gérer ton imprimante.
https://aures-support.com/DATA/drivers/ ... ESCPOS.pdf
Un début de réponse à ce propos est évoqué ici
viewtopic.php?p=207579#p207579
Comment est elle connectée ?
Est elle visible dans les options d'impression ?
Tu vas peut être devoir utiliser des Esc commands pour gérer ton imprimante.
https://aures-support.com/DATA/drivers/ ... ESCPOS.pdf
Un début de réponse à ce propos est évoqué ici
viewtopic.php?p=207579#p207579
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Imprimer un ticket de caisse
Merci Falsam pour ces infos utiles, mais j'avoue qu'il me faut au moins 3 mois pour étudier tout ça (Esc/Pos), or mon cas est très urgent car mon client est coincé à cause de l'impression. Je souhaiterais trouver une solution rapide (code source) qui me permettra d'avancer puis, je reviendrais sur lecours focément prochainement. Voici un échantillon du ticket que je souhaite imprimer: http://www.sarlminial.com/ticket.png
Merci beaucoup
à la limite, savoir au moins imprimer "Hello Word ! " pour commencer
Merci beaucoup
à la limite, savoir au moins imprimer "Hello Word ! " pour commencer
Win7 (x64) 64 bits Pb 5.72
Re: Imprimer un ticket de caisse
Voici un code source en Windev découvert sur Internet (forum vb)
Quelqu'un peut il traduire enPb?
Mereci
Code : Tout sélectionner
Début du code:
// Impression du ticket de caisse
I est un entier
nTotalGeneral est un réelSI
sOuvre(
PortImprimante,
256,
256) ALORS
// Ouverture du port parallèle
//Ouvre caisse
sEcrit(
PortImprimante,
ESC +
"p" +
Caract(
0)+
Caract(
10) +
Caract(
10))
// Impression de l'entete du ticketSI PAS
bImprimeLigne(
DebutGras+
" BOUTIQUE"+
FinGras) ALORS
Erreur(
"Erreur d'écriture sur le port n°"+
PortImprimante,...
"Vérifiez que l'imprimante est bien connectée et allumée.")
sFerme(
PortImprimante)RETOUR
FIN
//bImprimeLigne("----------------")
bImprimeLigne(
"")
bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)
bImprimeLigne(
DebutCompresse+
Complète(
"Désignation",
20)+
" !Qté! Prix!"+
FinCompresse)
// ! Total"+FinCompresse)
bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)
// Impression des lignes du ticketPOUR
I=
1 A
TableOccurrence(
"TABLE")SI
COL_TOTAL[
I]<>
0 ALORS
// Impression si ligne non vide
// Formatage de la ligne
bImprimeLigne(
DebutCompresse+
Complète(
COL_DESIGNATION[
I],
18)+
" !"+...
NumériqueVersChaine(
COL_QTE[
I],
"%2d")+
" ! "+...
NumériqueVersChaine(
COL_TOTAL[
I],
"%6.2f")+
"!"+
FinCompresse)
//NumériqueVersChaine(COL_TOTAL[I],"%6.2f")+FinCompresse)
// Cumul pour total
nTotalGeneral+=
COL_TOTAL[
I] FIN
FIN
bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)
// Ligne de total
bImprimeLigne(
DebutCompresse+
Complète(
"Total à régler: ",
30)+...
//NumeriqueVersChaine(nTotalGeneral)+FinCompresse)
NumériqueVersChaine(
nTotalGeneral,
"%6.2f")+
FinCompresse)
//bImprimeLigne("")
//bImprimeLigne("")
bImprimeLigne(
DebutCompresse+
"Réglé le :"+...
DateVersChaine(
DateSys())+
" "+...
Gauche(
HeureVersChaine(
HeureSys()),
5)+
FinCompresse)
// Impression du pied du ticket
bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)
bImprimeLigne(
DebutCompresse+
Complète(
"Espèces : ",
30)+...
//NumeriqueVersChaine(nTotalGeneral)+FinCompresse)
NumériqueVersChaine(
Saisie2,
"%6.2f")+
FinCompresse)
bImprimeLigne(
DebutCompresse+
Complète(
"Rendu : ",
30)+...
//NumeriqueVersChaine(nTotalGeneral)+FinCompresse)
NumériqueVersChaine(
Saisie3,
"%6.2f")+
FinCompresse)
bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)
bImprimeLigne(
" MERCI DE VOTRE VISITE")
bImprimeLigne(
" A BIENTOT")
bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)
bImprimeLigne(
"")
bImprimeLigne(
"")
bImprimeLigne(
"")
bImprimeLigne(
"")
bImprimeLigne(
"")
bImprimeLigne(
"")
bImprimeLigne(
"")
//Couper
sEcrit(
PortImprimante,
ESC +
"c0" +
Caract(
02) +
ESC +
"i")
sFerme(
PortImprimante)
// Fermeture du port parallèleSINON
Info(
"Erreur d'ouverture du port...!")
// Erreur d'ouverture du port parallèleFIN
Fin du code
Début procedure:
PROCEDURE
bImprimeLigne(
sLigne)
// avec un retour automatique à la ligne
SI
sEcrit(
PortImprimante,
AnsiVersOem(
Répète(
" ",
Marge)+
sLigne+
RC)) =
0 ALORSRENVOYER
FauxSINON
RENVOYER
VraiFIN
Fin procedure
Mereci
Win7 (x64) 64 bits Pb 5.72
Re: Imprimer un ticket de caisse
Tu as des imprimantes usb de caisse qui se comporte comme une imprimante Windows ( comme la Star TSP.100)..
c'est + rapide que du ESC/POS
Tu as juste à adapter la largeur de ton papier + papier continue, et la découpe du papier dans la configuration d'impression (comme n'importe quelle imprimante)
J'avais bossé sur un projet de caisse (80% terminée) mais stoppé par la loi de finance 2016 fraude à la tva (NF525). Non rentable.
Tu es certifié nf525 ou auto certification ?
Edit: Tu es a Alger, donc pas emmerdé comme nous avec cette stupide loi, sauf si ton client est Français
c'est + rapide que du ESC/POS
Tu as juste à adapter la largeur de ton papier + papier continue, et la découpe du papier dans la configuration d'impression (comme n'importe quelle imprimante)
J'avais bossé sur un projet de caisse (80% terminée) mais stoppé par la loi de finance 2016 fraude à la tva (NF525). Non rentable.
Tu es certifié nf525 ou auto certification ?
Edit: Tu es a Alger, donc pas emmerdé comme nous avec cette stupide loi, sauf si ton client est Français
Dernière modification par julien le ven. 03/déc./2021 21:24, modifié 1 fois.
Emjysoft, créateur de logiciels !
Re: Imprimer un ticket de caisse
L'impression marche très bien sur papierA4, (j'ai justement adapté les dimensions du papier ) comme si c'était sous windows, seulement ça ne donne rien sur papier rouleau de la caisse. Voir échantillon ici: http://www.sarlminial.com/ticket.png
Malheureusement, l'imprimante ne porte aucune marque à part une étiquette écrite en chinois...
Malheureusement, l'imprimante ne porte aucune marque à part une étiquette écrite en chinois...
Win7 (x64) 64 bits Pb 5.72
Re: Imprimer un ticket de caisse
Bjr omega
je sais pas si ça va te convenir
pour ce petit exemple d'impression de papier millimétré
voici ce qu'il faut modifié dans ce code pour réduire la largeur d'impression.
changement du coef de 0.035 par 0.0035 pour les lignes de code suivantes.
la ligne 174 a été modifiée par la ligne 177
la ligne 181 a été modifiée par la ligne 184
ces deux changement suffisent pour modifié le résultat de largeur d' impression
ainsi tu pourras comparé ces deux resultats en pdf
Cordialement
je sais pas si ça va te convenir
pour ce petit exemple d'impression de papier millimétré
voici ce qu'il faut modifié dans ce code pour réduire la largeur d'impression.
changement du coef de 0.035 par 0.0035 pour les lignes de code suivantes.
la ligne 174 a été modifiée par la ligne 177
la ligne 181 a été modifiée par la ligne 184
ces deux changement suffisent pour modifié le résultat de largeur d' impression
ainsi tu pourras comparé ces deux resultats en pdf
Cordialement
Code : Tout sélectionner
;#####################################################################
;### Rapporteur par kernadec pb4 OS windows 01/07/2008 ####
;### pour les amateurs de tracer précis avec le compas ####
;### mis a jour pour PB570LTS ####
;#####################################################################
Global cw.l,ch.l,rayon.l,rayonpixel.d,tfont.l,curseur.l,curseur1.l,x.d,y.d,x1.d,y1.d
Global wlargeur.l, whauteur.l,ImageNr,hdc,DC,r.RECT,rc,grille.d,grillepixel.d,u.d
Global Width.l,Color.l,wr.l,wb.l,cldm.l,clcm.l,clmm.l,wr,wb,wn
Declare init()
Declare ypage(x.f)
Declare xpage(x.f)
Declare papier(wr,wb,wn)
Declare dessin()
Declare fenetredessin()
Declare impression()
Declare MakeWinScreenshot(ImageNr,hwnd,Width,Height)
wlargeur=600
whauteur=600
rayonpixel=100 ;rayon du cercle en pixel 300 = rayon de 21cm /2 environ
grillepixel=270
Procedure Ligne(x,y,x1,y1,Width,Color)
GetWindowRect_(WindowID(0),r.RECT)
pen=CreatePen_(#PS_SOLID,Width,Color) ; style : #Ps_dash, #Ps_dot,etc
penOld=SelectObject_(DC,pen)
MoveToEx_(DC,x,y,0):LineTo_(DC,x1,y1)
DeleteObject_(pen)
DeleteObject_(penOld)
EndProcedure
Procedure Cercle(x,y,x1,y1,Width,Color)
GetWindowRect_(WindowID(0),r.RECT)
pen=CreatePen_(#PS_DASH,Width,Color) ;style : #Ps_dash, #Ps_dot, etc
penOld=SelectObject_(DC,pen)
Ellipse_(DC,x,y,x1,y1)
DeleteObject_(pen)
DeleteObject_(penOld)
EndProcedure
Procedure DrawRText(DC.l,x,y,Text.s,fFont.s,fangle.l,fHeight)
;#####################################################################
; Procedure DrawRText Author: Andreas
; Date: 14. June 2003
;#####################################################################
Font = CreateFont_(fHeight,0,fangle*10,0,0,0,0,0,0,0,0,0,0,fFont)
GetWindowRect_(WindowID(0),r.RECT)
OldFont = SelectObject_(DC,Font)
SetTextAlign_(DC,#TA_BASELINE)
SetBkMode_(DC,#TRANSPARENT)
SetTextColor_(DC,RGB(0,0,255))
ExtTextOut_(DC, x,y,0 ,r,Text,Len(Text),0 )
SelectObject_(DC,OldFont)
DeleteObject_(Font)
EndProcedure
init() ; depart et boucle recursive
End
Procedure init()
If OpenWindow(1, 710, 50, 260,200, "taille du tracer",#PB_Window_SystemMenu)
cw=300
ch=300
grille=grillepixel
rayon=rayonpixel
tfont=rayonpixel/35
StartDrawing(WindowOutput(1))
ButtonGadget(0, 40, 10, 70, 25, "Imprimer")
ButtonGadget(3, 150, 10, 70, 25, "Quitter")
TrackBarGadget(1, 10, 70, 240, 20, 0,300, #PB_TrackBar_Ticks)
SetGadgetState(1, 286)
TrackBarGadget(6, 10, 120, 240, 20, 0,300, #PB_TrackBar_Ticks)
SetGadgetState(6, 286)
CheckBoxGadget(8, 50, 155, 80, 20, "Rapporteur")
SetGadgetState(8, 0)
CheckBoxGadget(9, 140, 155, 80, 20, "Quadrillage")
SetGadgetState(9, 1)
DrawText(15, 50,"Dimension du Rapporteur :",RGB(0,0,0),RGB(224,223,227))
curseur=GetGadgetState(1)
rayonpixel=curseur
rayon=rayonpixel
DrawText(15, 50,"Dimension du Rapporteur :"+StrD((rayonpixel*0.035)*2,2)+"cm",RGB(0,0,0),RGB(224,223,227))
DrawText(15, 100,"Dimension du Cadrillage :",RGB(0,0,0),RGB(224,223,227))
curseur1=GetGadgetState(6)
grillepixel=curseur1:
grille=grillepixel
DrawText(15, 100,"Dimension du Cadrillage :"+StrD((grillepixel*0.035001)*2,2)+"cm",RGB(0,0,0),RGB(224,223,227))
StopDrawing()
OpenWindow(0, 100, 50, wlargeur,whauteur, "Rapporteur - Kernadec", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
DC=StartDrawing(WindowOutput(0))
If DC
DrawingMode(1)
If GetGadgetState(8)=1
dessin()
EndIf
If GetGadgetState(9)=1
papier(2,2,1)
EndIf
StopDrawing()
hShotWindow = FindWindow_(0,"Rapporteur - Kernadec")
If hShotWindow
hWinBmp = MakeWinScreenshot(0,hShotWindow, wlargeur, whauteur)
ImageGadget(20,0,0, wlargeur, whauteur, hWinBmp)
EndIf
EndIf
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 0
impression()
init()
Case 1
StartDrawing(WindowOutput(1))
curseur=GetGadgetState(1)
rayonpixel=curseur
rayon=rayonpixel
DrawText(15, 50,"Dimension du Rapporteur :"+StrD((rayonpixel*0.035)*2,2)+"cm",RGB(0,0,0),RGB(224,223,227))
StopDrawing()
Case 3
CloseWindow(0)
CloseWindow(1)
End
Case 6
StartDrawing(WindowOutput(1))
curseur1=GetGadgetState(6)
grillepixel=curseur1:
grille=grillepixel
DrawText(15, 100,"Dimension du Cadrillage :"+StrD((grillepixel*0.035)*2,2)+"cm",RGB(0,0,0),RGB(224,223,227))
StopDrawing()
Case #PB_Event_CloseWindow
CloseWindow(0)
CloseWindow(1)
End
EndSelect
tfont=rayonpixel/35
DC=StartDrawing(WindowOutput(0))
If DC
Box(0,0,600,600,RGB(255,255,255))
If GetGadgetState(8)=1
dessin()
EndIf
If GetGadgetState(9)=1
papier(2,2,1)
EndIf
StopDrawing()
hShotWindow = FindWindow_(0,"Rapporteur - Kernadec")
If hShotWindow
hWinBmp = MakeWinScreenshot(0,hShotWindow, wlargeur, whauteur)
ImageGadget(20,0,0, wlargeur, whauteur, hWinBmp)
EndIf
EndIf
EndSelect
Until EventID = #PB_Event_CloseWindow
EndIf
EndProcedure
Procedure impression()
If PrintRequester()
If StartPrinting("Rapporteur")
hDCl = StartDrawing(PrinterOutput())
w = GetDeviceCaps_ (hDCl, #HORZRES )
h = GetDeviceCaps_ (hDCl, #VERTRES )
If w/h > h/w ;definir otientation
rc=2 ;rapport page avec la racine de 2
Else
rc=1
EndIf
StopDrawing()
cw=xpage(300*0.0035) ; =21cm /2
;-{ci dessous coef page largeur divisée par 10 :
cw=xpage(300*0.0035) ; =21cm /2
ch=ypage(425*0.035) ; =29.7cm /2
rayon=xpage((rayonpixel*0.035)/Sqr(rc)) ;rayon en cm
grille=xpage((grillepixel*0.0035)/Sqr(rc))
;-{ci dessous coef dessin grille page divisée par 10 :
grille=xpage((grillepixel*0.0035)/Sqr(rc))
tfont=rayon/37 ;taille police proportionelle a l'echelle de la page a imprimer
DC = StartDrawing(PrinterOutput())
If DC
DrawingMode(#PB_2DDrawing_Outlined | #PB_2DDrawing_XOr)
DrawingMode(4|1)
If GetGadgetState(8)=1
dessin()
EndIf
If GetGadgetState(9)=1
papier(4,3,2)
EndIf
StopDrawing()
EndIf
EndIf
StopPrinting()
EndIf
EndProcedure
Procedure papier(wr,wb,wn)
x=cw:y=ch
x1=cw*2:y1=ch*2
u=0
cldm=RGB(175,125,5) ; RGB(255,0,0)
clcm=RGB(175,125,5) ; RGB(0,0,255)
clmm=RGB(175,125,5) ; jaune
Ligne(x,y1, x,0-y1,wr,cldm) ;axe v
Ligne(x1,y, 0-x1,y,wr,cldm) ;axe h
For i=1 To cw
u=u+(grille/100)
If i=0 Or i-Int(i/50)*50=0 Or i-Int(i/100)*100=0 Or i-Int(i/150)*150=0 Or i-Int(i/200)*200=0
Ligne(x+u,y, x+u,y1,wr,cldm)
Ligne(x,y+u, x1,y+u,wr,cldm)
Ligne(x-u,y, x-u,y1,wr,cldm)
Ligne(x,y+u, 0-x1,y+u,wr,cldm)
Ligne(x+u,y, x+u,0-y1,wr,cldm)
Ligne(x,y-u, x1,y-u,wr,cldm)
Ligne(x-u,y, x-u,0-y1,wr,cldm)
Ligne(x,y-u, 0-x1,y-u,wr,cldm)
ElseIf i-Int(i/10)*10=0
Ligne(x+u,y, x+u,y1,wb,clcm)
Ligne(x,y+u, x1,y+u,wb,clcm)
Ligne(x-u,y, x-u,y1,wb,clcm)
Ligne(x,y+u, 0-x1,y+u,wb,clcm)
Ligne(x+u,y, x+u,0-y1,wb,clcm)
Ligne(x,y-u, x1,y-u,wb,clcm)
Ligne(x-u,y, x-u,0-y1,wb,clcm)
Ligne(x,y-u, 0-x1,y-u,wb,clcm)
ElseIf i-Int(i/5)*5=0
Ligne(x+u,y, x+u,y1,wn,clcm)
Ligne(x,y+u, x1,y+u,wn,clcm)
Ligne(x-u,y, x-u,y1,wn,clcm)
Ligne(x,y+u, 0-x1,y+u,wn,clcm)
Ligne(x+u,y, x+u,0-y1,wn,clcm)
Ligne(x,y-u, x1,y-u,wn,clcm)
Ligne(x-u,y, x-u,0-y1,wn,clcm)
Ligne(x,y-u, 0-x1,y-u,wn,clcm)
Else
Ligne(x+u,y, x+u,y1,0,clmm)
Ligne(x,y+u, x1,y+u,0,clmm)
Ligne(x-u,y, x-u,y1,0,clmm)
Ligne(x,y+u, 0-x1,y+u,0,clmm)
Ligne(x+u,y, x+u,0-y1,0,clmm)
Ligne(x,y-u, x1,y-u,0,clmm)
Ligne(x-u,y, x-u,0-y1,0,clmm)
Ligne(x,y-u, 0-x1,y-u,0,clmm)
EndIf
Next
EndProcedure
Procedure dessin()
FillArea(0,0,RGB(255,255,255), RGB(255,255,255))
DrawingMode(1)
FrontColor(RGB(255, 255, 255))
For n =0 To 355 Step 5
If n>95 ; n+90(Depart du 0) et 1.1 calage graduation avec et les nombres
x = cw + (rayon-tfont*3) * Sin(((n+90)+1.1) / 180 * #PI)
y = ch + (rayon-tfont*3) * Cos(((n+90)+1.1) / 180 * #PI)
Else
x = cw + (rayon-tfont*3) * Sin(((n+90)+0.55) / 180 * #PI)
y = ch + (rayon-tfont*3) * Cos(((n+90)+0.55) / 180 * #PI)
EndIf
DrawRText(DC,x,y,Str(n),"Arial",n+270,tfont) ;
Next n
For o = 0 To 359 Step 30
x = cw+ rayon * Sin(o / 180 * #PI)
y = ch+ rayon * Cos(o / 180 * #PI)
xx = cw+ (rayon-rayon/17) * Sin(o / 180 * #PI)
yy = ch+ (rayon-rayon/17) * Cos(o / 180 * #PI)
LineXY(xx, yy , x, y,RGB(0, 0, 0))
x = cw+ (rayon-rayon/11) * Sin(o / 180 * #PI)
y = ch+ (rayon-rayon/11) * Cos(o / 180 * #PI)
xx = cw+ (rayon-rayon/3.414213562) * Sin(o / 180 * #PI)
yy = ch+ (rayon-rayon/3.414213562) * Cos(o / 180 * #PI)
LineXY(xx, yy , x, y,RGB(0, 0, 0))
For i = 1 To 29
If i = 5 Or i = 15 Or i = 25
x = cw+ rayon * Sin((i + o) / 180 * #PI)
y =ch+ rayon * Cos((i + o) / 180 * #PI)
xx = cw + (rayon-rayon/22) * Sin((i + o) / 180 * #PI)
yy = ch + (rayon-rayon/22) * Cos((i + o) / 180 * #PI)
LineXY(x, y , xx, yy, RGB(0, 0, 0))
ElseIf i = 10 Or i = 20
x = cw + rayon * Sin((i + o) / 180 * #PI)
y = ch+ rayon * Cos((i + o) / 180 * #PI)
xx = cw+ (rayon - rayon/16) * Sin((i + o) / 180 * #PI)
yy = ch+ (rayon - rayon/16) * Cos((i + o) / 180 * #PI)
LineXY(xx, yy , x, y,RGB(0, 0, 0))
Else
x = cw+rayon * Sin((i + o) / 180 * #PI)
y = ch+rayon * Cos((i + o) / 180 * #PI)
xx = cw+(rayon - rayon/33) * Sin((i + o) / 180 * #PI)
yy = ch+(rayon - rayon/33) * Cos((i + o) / 180 * #PI)
LineXY(xx, yy , x, y,RGB(0, 0, 0))
EndIf
Next i
Next o
LineXY(cw-rayon/20, ch , cw+rayon/20, ch,RGB(0, 0, 0))
LineXY(cw, ch-rayon/20 , cw, ch+rayon/20,RGB(0, 0, 0))
DrawingMode(4)
Ellipse(cw,ch, rayon, rayon, RGB(0,0,0))
Ellipse(cw,ch, rayon/Sqr(2), rayon/Sqr(2), RGB(0,0,0))
EndProcedure
Procedure MakeWinScreenshot(ImageNr,hwnd,Width,Height)
;###### appel place en amont pour l' utilisation de ######################
;###### la routine de sauvegarde du contenu de la fenetre ######################
; hShotWindow = FindWindow_(0,"Rapporteur") ; enter the right name here!
; If hShotWindow
; hWinBmp = MakeWinScreenshot(0,hShotWindow, wlargeur, whauteur)
; ImageGadget(2,0,0, wlargeur, whauteur, hWinBmp)
; EndIf
;#####realisee par l'auteur cd dessous a qui j'adresse aussi mes remerciements ###
; Auteur: Danilo (updated for PB 4.00 by Andre)
; Date: 22. April 2003
hImage = CreateImage(ImageNr,Width,Height)
hdc = StartDrawing(ImageOutput(ImageNr))
BitBlt_(hdc,0,0,Width,Height,GetDC_(hwnd),0,0,#SRCCOPY)
StopDrawing()
ProcedureReturn hImage
EndProcedure
Procedure xpage(x.f)
x = x * (PrinterPageWidth()/21) ; 21cm A4
ProcedureReturn x
EndProcedure
Procedure ypage(x.f)
x = x * (PrinterPageHeight()/29.7) ; 29,7cm A4
ProcedureReturn x
EndProcedure
Re: Imprimer un ticket de caisse
Bonjour Kernadec
Merci pour ce code, mais j'avoue que je n'ai pas bien compris, est-ce que ce code permet d'imprimer un ticket de caisse? est-ce que vous pouvez me montrer comment imprimer juste une ligne de texte sur ce type d'imprimante? comme par exemple: " Hello Word!"?
J'ai exécuté le code et j'ai obtenu un carré (box vertical coloré) imprimé sur fichier PDF en mémoire... mais pas de texte. J'aurais souhaité voir du texte aligné colonne1 colonne2 etc comme par exemple:
en col1: DESIGNATION col2: Qté col3:Pu col4: Mnt
(2ou 3lignes) +la ligne Total mnt voir échantillon ici: http://www.sarlminial.com/ticket.png
Je n'ai pas l'imprimante caisse pour l'instant, mon client va me la ramener cet après midi, donc, pour l'instant je fais des tests en mémoire (pdf)
Merci
Merci pour ce code, mais j'avoue que je n'ai pas bien compris, est-ce que ce code permet d'imprimer un ticket de caisse? est-ce que vous pouvez me montrer comment imprimer juste une ligne de texte sur ce type d'imprimante? comme par exemple: " Hello Word!"?
J'ai exécuté le code et j'ai obtenu un carré (box vertical coloré) imprimé sur fichier PDF en mémoire... mais pas de texte. J'aurais souhaité voir du texte aligné colonne1 colonne2 etc comme par exemple:
en col1: DESIGNATION col2: Qté col3:Pu col4: Mnt
(2ou 3lignes) +la ligne Total mnt voir échantillon ici: http://www.sarlminial.com/ticket.png
Je n'ai pas l'imprimante caisse pour l'instant, mon client va me la ramener cet après midi, donc, pour l'instant je fais des tests en mémoire (pdf)
Merci
Win7 (x64) 64 bits Pb 5.72
Re: Imprimer un ticket de caisse
c' est vrai pardon, c'est ma cuisine
mais bon ca devrait le faire, j'ai pas fait de modif pour l'affichage fenêtre pour le coup
dans le code mise en commentaires ligne 195 ; papier(4,3,2)
juste après tu ajoute ce bout de code
Cordialement
mais bon ca devrait le faire, j'ai pas fait de modif pour l'affichage fenêtre pour le coup
dans le code mise en commentaires ligne 195 ; papier(4,3,2)
juste après tu ajoute ce bout de code
Code : Tout sélectionner
; papier(4,3,2)
For i=150 To 3000 Step 150
DrawRText(DC,150 , i ," alpha omega alpha omega " ,"Arial",n,tfont) ;
Next i
Re: Imprimer un ticket de caisse
Merci encore Kernadec
ça avance bien mais...il y a un MAIS:
1. Comment faire pour supprimer le rapporteur (ainsi que le bouton Rapporteur)?
2. Comment faire pour supprimer le Box coloré??
J'ai essayé mais j'ai pas trouvé comment les supprimer
Merci beaucoup Kernadec, c'est vraiment très gentil
ça avance bien mais...il y a un MAIS:
1. Comment faire pour supprimer le rapporteur (ainsi que le bouton Rapporteur)?
2. Comment faire pour supprimer le Box coloré??
J'ai essayé mais j'ai pas trouvé comment les supprimer
Merci beaucoup Kernadec, c'est vraiment très gentil
Win7 (x64) 64 bits Pb 5.72
Re: Imprimer un ticket de caisse
désolé @omega j'ai pas le temps pour écrire ce que tu aimerais bien sur je t'ai fait ça à l'arrache
c'est pour cela que j'ai pris ce vieux code pour ne pas avoir a en faire un
je t'ai épargné le calcul de l' échelle d' impression qu 'il te faudra gérer j'ai mis dans la boucle une hauteur de 3000
avec un step de 150 il faut gérer cela avec le format de page impression c'est dans la doc à "Printer index"
maintenant en l'étudiant tu devrais t'en sortir
dans ce code tu récupère les procédures dont tu as besoin pour gérer ton impression
après récupère également la déclaration des variables
à toi de faire la fenêtre de gestion de ton ticket de caisse
après un appel à la procédure impression avec un ptit bouton et le tour est joué
Global cw.l,ch.l,rayon.l,rayonpixel.d,tfont.l,curseur.l,curseur1.l,x.d,y.d,x1.d,y1.d
Global wlargeur.l, whauteur.l,ImageNr,hdc,DC,r.RECT,rc,grille.d,grillepixel.d,u.d
Global Width.l,Color.l,wr.l,wb.l,cldm.l,clcm.l,clmm.l,wr,wb,wn
impression()
DrawRText(DC.l,x,y,Text.s,fFont.s,fangle.l,fHeight) il faudras lui ajouter une variable couleur en parametre
ypage(x.f)
xpage(x.f)
cordialement
ps: il y un moment je voulais me faire un programme pour les ticket de stationnement
mais il faut une imprimante thermique avec un type de papier donc j'ai laissé tomber
car l'idée malhonnête m'avait tenté de faire des économies de parcmètres
c'est pour cela que j'ai pris ce vieux code pour ne pas avoir a en faire un
je t'ai épargné le calcul de l' échelle d' impression qu 'il te faudra gérer j'ai mis dans la boucle une hauteur de 3000
avec un step de 150 il faut gérer cela avec le format de page impression c'est dans la doc à "Printer index"
maintenant en l'étudiant tu devrais t'en sortir
dans ce code tu récupère les procédures dont tu as besoin pour gérer ton impression
après récupère également la déclaration des variables
à toi de faire la fenêtre de gestion de ton ticket de caisse
après un appel à la procédure impression avec un ptit bouton et le tour est joué
Global cw.l,ch.l,rayon.l,rayonpixel.d,tfont.l,curseur.l,curseur1.l,x.d,y.d,x1.d,y1.d
Global wlargeur.l, whauteur.l,ImageNr,hdc,DC,r.RECT,rc,grille.d,grillepixel.d,u.d
Global Width.l,Color.l,wr.l,wb.l,cldm.l,clcm.l,clmm.l,wr,wb,wn
impression()
DrawRText(DC.l,x,y,Text.s,fFont.s,fangle.l,fHeight) il faudras lui ajouter une variable couleur en parametre
ypage(x.f)
xpage(x.f)
cordialement
ps: il y un moment je voulais me faire un programme pour les ticket de stationnement
mais il faut une imprimante thermique avec un type de papier donc j'ai laissé tomber
car l'idée malhonnête m'avait tenté de faire des économies de parcmètres
Re: Imprimer un ticket de caisse
Pas certain que tu puisses utiliser les fonctions d'impression de PB pour une imprimante de caisse. En effet, celle-ci utilisent souvent l'impression ligne par ligne en direct (pour des raisons légales: chaque article doit être enregistré à son passage. Si on se trompe, on fait alors une transaction inverse sur l'article).
Les fonctions PB envoient tout le texte une fois la commande StopPrinting()
L'impression ligne par ligne se faisait très facilement avec les anciennes versions de Basic (commande LPRINT)
La plupart des imprimantes de caisse utilisent le mode Epson ESC/POS (voir post Falsam).
Ce n'est pas très difficile, il suffit juste d'insérer les codes ESC/POS dans les chaines.
Enfin, tu verra quand tu recevra l'imprimante.
Les fonctions PB envoient tout le texte une fois la commande StopPrinting()
L'impression ligne par ligne se faisait très facilement avec les anciennes versions de Basic (commande LPRINT)
La plupart des imprimantes de caisse utilisent le mode Epson ESC/POS (voir post Falsam).
Ce n'est pas très difficile, il suffit juste d'insérer les codes ESC/POS dans les chaines.
Enfin, tu verra quand tu recevra l'imprimante.
Re: Imprimer un ticket de caisse
Merci Kernadec.
Bonjour Marc56
Justement, c'est ce que je cherche à savoir, comment utiliser les commandes Esc/Pos? J'ai cherché partout, y compris des tutos, mais maheureusement aucun exemple n'est proposé. Il me faut d'abords la syntaxe qui permet d'imprimer du text positionné (col,ligne) ( à savoir largeur du papier=58mm)
Tout simplement
je cherche juste un exemple
merci
Bonjour Marc56
Justement, c'est ce que je cherche à savoir, comment utiliser les commandes Esc/Pos? J'ai cherché partout, y compris des tutos, mais maheureusement aucun exemple n'est proposé. Il me faut d'abords la syntaxe qui permet d'imprimer du text positionné (col,ligne) ( à savoir largeur du papier=58mm)
Tout simplement
je cherche juste un exemple
merci
Win7 (x64) 64 bits Pb 5.72
Re: Imprimer un ticket de caisse
Bonjour,
Il faudra que tu commences par regarder comment est configurée l'imprimante (et ne pas la changer)
Pour cela, il faut lui faire sortir sa page de configuration. cela se fait en général en tenant le bouton FF (form feed (= éjection page)) ou LF ou n'importe quel autre bouton principal pendant qu'on l'allume.
Si elle est configurée en ESC-POS alors tu l'utiliseras le plus souvent (une fois le driver installé) comme un périphérique série en utilisant la lib serial de PB et en intercalant chaque commande ESC en début de ligne. (OpenSerial ..., WriteSerialPortString ... CloseSerial)
Une commande ESC est le caractère Chr(27) suivi d'un caractère à prendre dans le tableau.
Ces codes servent par exemple à changer de taille, à éjecter, à couper le ticket etc
Donc tes lignes seront du type: WriteSerialPortString(0, Chr(27) + Chr(...) + "Total = ")
À la base, il suffit d'utiliser une fonte non-proportionnelle pour aligner le texte.
Pour imprimer des codes barre, il faut se référer à la doc.
(je n'ai pas ce type d'imprimante, donc c'est juste le principe théorique. On doit pouvoir tester en utilisant un driver d'imprimante caisse + un redirecteur de port serie + une sortie virtuelle (fineprint))
Il faudra que tu commences par regarder comment est configurée l'imprimante (et ne pas la changer)
Pour cela, il faut lui faire sortir sa page de configuration. cela se fait en général en tenant le bouton FF (form feed (= éjection page)) ou LF ou n'importe quel autre bouton principal pendant qu'on l'allume.
Si elle est configurée en ESC-POS alors tu l'utiliseras le plus souvent (une fois le driver installé) comme un périphérique série en utilisant la lib serial de PB et en intercalant chaque commande ESC en début de ligne. (OpenSerial ..., WriteSerialPortString ... CloseSerial)
Une commande ESC est le caractère Chr(27) suivi d'un caractère à prendre dans le tableau.
Ces codes servent par exemple à changer de taille, à éjecter, à couper le ticket etc
Donc tes lignes seront du type: WriteSerialPortString(0, Chr(27) + Chr(...) + "Total = ")
À la base, il suffit d'utiliser une fonte non-proportionnelle pour aligner le texte.
Pour imprimer des codes barre, il faut se référer à la doc.
(je n'ai pas ce type d'imprimante, donc c'est juste le principe théorique. On doit pouvoir tester en utilisant un driver d'imprimante caisse + un redirecteur de port serie + une sortie virtuelle (fineprint))
Re: Imprimer un ticket de caisse
J'ai paramétré l'imprimante, j'ai utilisé la méthode graphique classique, et finalement ça marche, mais j'aurais quand même préféré utiliser (ou du moins savoir) utiliser les commandes Esc/Pos...
Merci à tous
Merci à tous
Win7 (x64) 64 bits Pb 5.72