j'aimerais imprimer des recettes de cuisines, mais ça peut aussi s'appliquer à d'autres textes nécessitant plus d'une page.
Le principe est de compter les lignes, et dès qu'on arrive au numéro de ligne maximum, on lance une invite à tourner la page pour imprimer la suite.
Le problème est que le requêteur de messages s'ouvre avant que l'imprimante imprime qui que ce soit, donc c'est pas le but recherché
Si quelqu'un a le savoir faire, je l'en remercierai beaucoup et je le remercie déjà par anticipation.
comme vous pouvez le voir, la procédure est scindée en deux parties : la première pour le recto et la seconde pour le verso, après retournement manuel de la page.
Voici la procédure pour imprimer
Code : Tout sélectionner
Procedure Imprimer()
Select EventType()
Case #PB_EventType_LeftClick
Protected Numero_de_ligne = 0, Lignes_par_page_maxi = 69, X = 10, Y = 0, Texte$
Protected Resultat = 0
Nbre_de_lignes_a_imprimer = CountGadgetItems(#Preparation)
;-première page
If DefaultPrinter() <> 0
If StartPrinting("Début")
StartDrawing(PrinterOutput())
;Impression du titre
PoliceImpression("Comic Sans MS", 20, #PB_Font_Bold, 0, 0, $F10612)
ImpressionTexte(x, y, UCase(GetGadgetText(#Nom)))
Debug "" + Numero_de_ligne + " " + UCase(GetGadgetText(#Nom))
Y + 20
Numero_de_ligne + 2
;Impression du sous titre "Ingrédients"
PoliceImpression("Comic Sans MS", 12, #PB_Font_Bold, #PB_Font_HighQuality, 0, $0)
ImpressionTexte(x, y, "Ingrédients :")
Numero_de_ligne + 1 ;ligne vide
;Impression des ingrédients
PoliceImpression("Comic Sans MS", 12, #PB_Font_HighQuality, 0, 0, $0)
Debug "" + Numero_de_ligne + " " + "Ingrédients :"
Numero_de_ligne + 1 ;ligne vide
ForEach Recettes()\Ingredients()
With Recettes()\Ingredients()
texte$ = \Quantite + " "
If \Unite > 0
texte$ + GetGadgetItemText(ListeIngredients()\Ingredients(1), \Unite) + " "
EndIf
texte$ + \Ingredient
EndWith
If Numero_de_ligne < Lignes_par_page_maxi
Y + 5
Numero_de_ligne + 1
ImpressionTexte(x, y, texte$)
Debug "" + Numero_de_ligne + " " + texte$
EndIf
Next
If Numero_de_ligne < Lignes_par_page_maxi
Y + 10
Numero_de_ligne + 1
;Impression du sous titre "Préparation"
PoliceImpression("Comic Sans MS", 12, #PB_Font_Bold, #PB_Font_HighQuality, 0, $0)
ImpressionTexte(x, y, "Préparation :")
PoliceImpression("Comic Sans MS", 12, #PB_Font_HighQuality, 0, 0, $0)
Debug "" + Numero_de_ligne + " " + "Préparation :"
Numero_de_ligne + 1 ;ligne vide
y + 5
EndIf
;Impression de la préparation
i = 0
While i <= Nbre_de_lignes_a_imprimer
If Numero_de_ligne <= Lignes_par_page_maxi
ImpressionTexte(X, Y, GetGadgetItemText(#Preparation, i))
Y + 5
Numero_de_ligne + 1
Debug GetGadgetItemText(#Preparation, i)
If Len(GetGadgetItemText(#Preparation, i)) > 80
Numero_de_ligne + 1
EndIf
Else
Break
EndIf
i + 1
Wend
StopDrawing()
EndIf ;StartPrinting
;-deuxième page, s'il y a lieu
If i <= Nbre_de_lignes_a_imprimer
Numero_de_ligne = -1
Y = 10
If StartPrinting("Suite")
StartDrawing(PrinterOutput())
If CountGadgetItems(#Preparation) - i
Resultat = MessageRequester("Info", "Veuillez tourner la page pour poursuivre l'impression", #PB_MessageRequester_Ok)
If Resultat = 1
;Impression de la suite de la préparation
PoliceImpression("Comic Sans MS", 12, #PB_Font_HighQuality, 0, 0, $0)
While i <= Nbre_de_lignes_a_imprimer
If Numero_de_ligne <= Lignes_par_page_maxi
;Si la ligne fait plus de 80 caractères
If Len(GetGadgetItemText(#Preparation, i)) > 80
Numero_de_ligne + 1
y + 5
EndIf
ImpressionTexte(X, Y, GetGadgetItemText(#Preparation, i))
y + 5
Numero_de_ligne + 1
Debug GetGadgetItemText(#Preparation, i)
i + 1
EndIf
Wend
EndIf ;Résultat
EndIf ;Invite pour tourner la page
StopPrinting()
EndIf ;fin de boucle StartPrinting
EndIf ;fin de boucle S'il y a une deuxième page
EndIf ;fin de boucle DefaultPrinter
EndSelect
EndProcedure