imprimer

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

imprimer

Message par YvesRossignol »

Bonjour, je veux imprimer des résultats de calculs sur le default printer.

si je veux uniquement imprimer des données comme : " Iw soudure = 12.2345 " "Sw= 34.5435" sans les "" comment faire....

si je veux imprimer une forme complete fait à partir de purevision ????

j'utilisais en GWbasic print using ##.#####, etc.... (et en turbobasic de Borland aussi....)

Merci de vos commentaire.

Je fais un programme de calcul de soudure... c'est mon premier, il y a 4 mois je ne connaissais rien au purebasic... maintenant je suis à 1400 lignes....

Yves :D
Yves Rossignol
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: imprimer

Message par Marc56 »

À la base, commande DrawText()
Maintenant la nouvelle lib VectorDrawing

Print using n'existe pas en PB, pour réaliser son équivalent, on construit une chaine à base de StrXXX et de LSet et Rset

Pour des fonctions d'impression plus élaborées, voir les excellentes libs sur le site PureBasicPower (http://www.purebasicpower.de)
PurePDF, PurePDFBarcode, PrinterLib (Windows), PrintBarcode

J'ai toujours fais mes éditions avec ces libs, ça permet de ne pas s'occuper du périphérique de sortie (toujours une page A4 peu importe la résolution), insertion automatique de codes barre, et archivage des sorties (fichier PDF direct, sans imprimante virtuelle)

PS. Ce serait bien que ces libs soient inclues dans le package de base si son auteur l'autorise.
Il ne manquerait qu'une lib QRCode et Datamatrix pour avoir un système d'édition professionnel.

:wink:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: imprimer

Message par Ar-S »

@Marc => Tu peux peut être t'inspirer de ça pour le QRcode : http://www.purebasic.fr/french/viewtopi ... lit=qrcode
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: imprimer

Message par Marc56 »

@Ar-S: Merci :)

Ça ne fonctionne pas (plus) sur mon W10 x64 PB 5.24 LTS x64:
Impossible de démarrer le programme car il manque ‹”$€.DLL sur votre ordinateur. Essayez de réinstaller le programme pour corriger ce problème.
suivi de:
L'exécutable de débogage se ferme de façon inattendue.
Même avec modification de la ligne ImportC

De mémoire, je l'avais déjà téléchargé en janvier et ça a fonctionné. Une mise à jour W10?

PS. Ce serait bien d'avoir aussi les codes Datamatrix. Ils sont utilisés dans le monde éditique, bancaire et pharmaceutique.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: imprimer

Message par Mesa »

Le formatage des nombres est une question qui revient souvent et avant que PB ne propose une fonction...

Voici mon printusing perso à utiliser avant d'imprimer.

Code : Tout sélectionner

;================================================================================================================================================
; Fonction PRINT USING
; 
; PrintUsing()
; 
; Syntaxe
; 
; Resultat = PrintUsing(Chaine$, Format$, [Options, [Virgule$]])
; Resultat = PrintUsing(Chaine$, [[Prefixe][#][séparateur]][#][.][#]], [Options, [Virgule$]])
; 
; Description
; 
; Renvoie la représentation de la chaine de caractères Chaine$ correspondant au masque spécifié. 
;
; Chaine$ : Texte à formater

; Format$ : Masque sous la forme d'une chaîne indiquant comment formater le texte. 
; Le masque est de la forme: [[Prefixe][#][séparateur]][#][.][#]]
; 
; Paramètre  facultatifs : Options
;   #PB_PrintUsing_Defaut      : Aucune option.
;   #PB_PrintUsing_SignPlus    : Affiche le signe "+" devant le nombre.
;   #PB_PrintUsing_NoDecimal   : N'affiche pas la partie décimale du nombre. 
;                                Utile pour afficher un numéro de téléphone avec le Point (".") comme séparateur.
;   #PB_PrintUsing_ForceZero   : Force le remplissage du format avec des "0" si nécessaire.
;   #PB_PrintUsing_ForceEspace : Force le remplissage du format avec des " " si nécessaire.
;   #PB_PrintUsing_ForceEtoile : Force le remplissage du format avec des "*" si nécessaire.

;
; Paramètre  facultatifs : Virgule$  
;           Par défaut la virgule est représentée par "." dans le resultat du formatage.
;           N'importe quel caractère ou une chaine de caractères peut être utilisée.
;             Ex: Virgule$ = "," : La virgule est représentée par "," dans le resultat du formatage 
;                 Astuce: Ajouter un suffixe : Virgule$ = " = "
;                                              Virgule$ = " est en hausse de "
;
; Remarque : Un préfixe est une chaine de caractère quelconque.
;            Ex: "Tel : ##.##.##.##.##.## (A utiliser avec l'option #PB_PrintUsing_NoDecimal")
;
; Remarque : #PB_PrintUsing_ForceZero et #PB_PrintUsing_ForceEtoile
;            ne tiennent pas compte du séparateur.
;
;
; Exemple
;   Debug PrintUsing("-1234.00","### ###") ;=> -1 234
;   Debug PrintUsing("-1234","### ###.##") ;=> -1 234.00
;   Debug PrintUsing("-1234.567","### ###.##") ;=> -1 234.56
;   Debug PrintUsing("1234567890","### ###.## ¬", #PB_PrintUsing_Defaut,",") ;=> 1 234 567 890,00 ¬
;   Debug PrintUsing("1234567890.56","#.### %",#PB_PrintUsing_SignPlus,",") ;=> +1234567890,560 %
;   Debug PrintUsing("0102030405","Tel : ##.##.##.##.##.##",#PB_PrintUsing_NoDecimal,".") ;=> Tel : 01.02.03.04.05
;   Debug PrintUsing("190120121845","##/##/#### ##h ##'") ;=> 19/01/2012 18h 45'
;   Debug PrintUsing("1234567890.56","### ###.### %",#PB_PrintUsing_SignPlus,"<-@->") ;=> +1 234 567 890<-@->560 %
;   Debug PrintUsing("1234567890.5","$###,###.##") ;=> $1,234,567,890.50
;   Debug PrintUsing("12345678905258","##/## ##:##") ;=> 12/34/56/78/90 52:58
;   Debug PrintUsing("12.56","###.##",#PB_PrintUsing_ForceZero) ;=> 012.56
;   Debug PrintUsing("12.56","######.##",#PB_PrintUsing_ForceEtoile) ;=> ****12.56
;   Debug PrintUsing("12.56","### ###.##",#PB_PrintUsing_SignPlus|#PB_PrintUsing_ForceZero) ;=> +000012.56
;  
;   
;
; OS Supportés 
; 
; Tous
; 
;================================================================================================================================================  

#PB_PrintUsing_Defaut      = 1 << 0
#PB_PrintUsing_SignPlus    = 1 << 1
#PB_PrintUsing_NoDecimal   = 1 << 2
#PB_PrintUsing_ForceZero   = 1 << 3
#PB_PrintUsing_ForceEtoile = 1 << 4
#PB_PrintUsing_ForceEspace = 1 << 5
;#PB_PrintUsing_Scientific = 1 << 6 To Do / Reste à faire 1.e-12 ou 1.10^-12

Procedure.s PrintUsing(Chaine.s, Format.s, Options.b=0, Virgule.s=".")
  ;Pour mémoire ===========================
  ;   #PB_PrintUsing_Defaut      = 1 << 0
  ;   #PB_PrintUsing_SignPlus    = 1 << 1
  ;   #PB_PrintUsing_NoDecimal   = 1 << 2
  ;   #PB_PrintUsing_ForceZero   = 1 << 3
  ;   #PB_PrintUsing_ForceEtoile = 1 << 4
  ;   #PB_PrintUsing_ForceEspace = 1 << 5 
  ;========================================
  
  
  
  ;--------------------------- Options #PB_PrintUsing_SignPlus et gestion du Signe "-" ----------------------------------------------------------
  Sign.s = "" ; permet d'afficher le signe - ou le signe + ou pas de signe
  
  If Options & #PB_PrintUsing_SignPlus ;Affichage du signe +
    Sign="+"
  EndIf
  
  If Left(Chaine,1)="-" ;Affichage du signe -
    Sign = "-"
    Chaine = Mid(Trim(Chaine),2)
  EndIf
  
  ;---------------------------Les espaces en début et fin sont éliminés -------------------------------------------------------------------------
  Trim_Chaine.s = Trim(Chaine)
  Trim_Format.s = Trim(Format)
  
  ;--------------------------- Prefixe présent ? ------------------------------------------------------------------------------------------------  
  ; Préfixe de type $###.. ou Tel :##...
  
  Longueur_Prefix = 1
  Prefix.s = ""
  While Mid(Trim_Format,Longueur_Prefix,1) <> "#" 
    Longueur_Prefix = Longueur_Prefix + 1
  Wend
  Longueur_Prefix = Longueur_Prefix - 1      
  Prefix = Mid(Trim_Format,1,Longueur_Prefix)
  ;Debug Prefix
  If  Longueur_Prefix >0
    Trim_Format = Mid(Trim_Format,Longueur_Prefix+1)
    ;Debug Trim_Format
  EndIf
  
  
  ;--------------------------- Position de la virgule -------------------------------------------------------------------------------------------
  ;Pour ne pas confondre la virgule "." avec un séparateur ".", on inverse la chaine de caractère
  ;Position Virgule dans la Chaine
  Position_Virgule_Chaine = 1 + Len(Trim_Chaine) - FindString(ReverseString(Trim_Chaine),".",1)
  ;Cas des nombres entiers Position Virgule
  If Position_Virgule_Chaine = 0 : Position_Virgule_Chaine = Len(Trim_Chaine)+1 : EndIf
  
  ;Position Virgule dans le Format
  Position_Virgule_Format = 1 + Len(Trim_Format) - FindString(ReverseString(Trim_Format),".",1);FindString(Format,".",1)
                                                                                               ;Cas des nombres entiers Position Virgule
  If Position_Virgule_Format = 0 : Position_Virgule_Format = Len(Trim_Format)+1 : EndIf
  
  
  
  ;--------------------------- Nombre de caractères ---------------------------------------------------------------------------------------------  
  Nbre_Caractere_Format_Partie_Entiere = CountString(Mid(Trim_Format,1,Position_Virgule_Format),"#") ; partie entière Format
  Nbre_Caractere_Format_Partie_Decimale = CountString(Mid(Trim_Format,Position_Virgule_Format),"#")  ; partie décimale Format
  
  Nbre_Caractere_Chaine_Partie_Entiere = Position_Virgule_Chaine-1  ;longueur partie entiere chaine
                                                                    ;Nbre_Caractere_Chaine_Partie_Decimale =
  
  
  
  ;--------------------------- Position du séparateur -------------------------------------------------------------------------------------------
  ; 1 Seul séparateur est géré !
  Position_Separateur = 1
  While Mid(Trim_Format,Position_Separateur,1) = "#"
    Position_Separateur + 1
  Wend
  
  ;Ne sert A RIEN ?
  Separateur.s=Mid(Trim_Format,Position_Separateur,1);:Debug Separateur
  
  ;Partie entière : Répétition d'un groupe de caractère dans le format ?
  ;### ###.## = groupe1 + separateur + groupe2 + "." + groupe3
  ;          et Format_Partie_Entiere = groupe1 + separateur + groupe2 
  Format_Groupe1.s= Mid(Trim_Format,1,Position_Separateur);:Debug Format_Groupe1
  
  ;Ne pas confondre virgule "." et absence de separateur
  If Position_Virgule_Format = Position_Separateur
    Format_Groupe1 = Mid(Format_Groupe1,1,Len(Format_Groupe1)-1)
  EndIf
  
  Format_Partie_Entiere.s  = Mid(Trim_Format,1,Position_Virgule_Format-1);:Debug Format_Partie_Entiere
  Format_Partie_Decimale.s = Mid(Trim_Format,Position_Virgule_Format+1)  ;:Debug Format_Partie_Decimale
  
  ;si Nbre_Caractere_Chaine_Partie_Entiere > Nbre_Caractere_Format_Partie_Entiere
  ;alors on crée un format en répétant le motif groupe1
  N = Nbre_Caractere_Format_Partie_Entiere
  While N < Nbre_Caractere_Chaine_Partie_Entiere
    Format_Partie_Entiere = Format_Groupe1 + Format_Partie_Entiere;:Debug Format_Partie_Entiere
    N + Position_Separateur -1
  Wend
  
  
  
  ;----------------------------------------------------------------------------------------------------------------------------------------------
  ;------------------------------------- RESULTAT -----------------------------------------------------------------------------------------------
  
  ;----------------- Paramètre Facultatif #PB_PrintUsing_forceZero Si la chaine est trop courte alors remplir avec des zéros --------------------
  If Options & #PB_PrintUsing_ForceZero ; 
    Forcer_Zero = 1 
  Else
    Forcer_Zero = 0
  EndIf 
  
  ;-----------------Paramètre Facultatif #PB_PrintUsing_forceEtoile Si la chaine est trop courte,alors remplir avec des "*" ---------------------
  If Options & #PB_PrintUsing_ForceEtoile ; 
    Forcer_Etoile = 1 
  Else
    Forcer_Etoile = 0
  EndIf 
  
  ;-----------------Paramètre Facultatif #PB_PrintUsing_forceEspace Si la chaine est trop courte,alors remplir avec des " " ---------------------
  If Options & #PB_PrintUsing_ForceEspace ; 
    Forcer_Espace = 1 
  Else
    Forcer_Espace = 0
  EndIf 
  
  ;--------------------------- Partie Décimale avec des 0 ---------------------------------------------------------------------------------------
  ; ajouter 0 en partie decimal si necessaire
  ; Resultat_Partie_Decimale.s = LSet(Mid(Trim_Chaine,Position_Virgule_Chaine+1),Nbre_Caractere_Format_Partie_Decimale,"0")
  
  
  NchaineDecimale.s = Mid(Trim_Chaine,Position_Virgule_Chaine+1); partie decimale chaine
  
  Resultat_Partie_Decimale.s ;= Chaine_Partie_Decimale
  CarCh =1
  ; Lire le Format, caractère par caractère
  Nchaine.s = Mid(Trim_Chaine,1,Position_Virgule_Chaine-1); partie entiere chaine
  For CarFo = 1 To Len(Format_Partie_Decimale)
    Car.s = Mid(Format_Partie_Decimale, CarFo,1)
    ; Si c'est un "#" alors on place un "chiffre" de Chaine$
    If Car ="#"
      If Mid(NchaineDecimale,CarFo,1) = ""; Si la partie décimale de la chaine est trop courte
        Resultat_Partie_Decimale = Resultat_Partie_Decimale + "0"; alors on ajoute un zéro
      Else
        Resultat_Partie_Decimale = Resultat_Partie_Decimale  + Mid(NchaineDecimale,CarCh,1)
      EndIf
      CarCh+1
    Else ; sinon on place le reste des caratères
      Resultat_Partie_Decimale =   Resultat_Partie_Decimale + Car
    EndIf
    
  Next CarFo
  
  
  
  ;--------------------------- Paramètre facultatif Virgule$-------------------------------------------------------------------------------------
  If Nbre_Caractere_Format_Partie_Decimale > 0 ;Faut-il mettre une virgule
    If Virgule <>"."                           ;Si oui alors...
      Resultat_Partie_Decimale = Virgule + Resultat_Partie_Decimale ; virgule personnalisée
    Else
      Resultat_Partie_Decimale = "." + Resultat_Partie_Decimale ; virgule "."
    EndIf
  EndIf
  
  
  
  ;----------------------------- Partie Entière -------------------------------------------------------------------------------------------------
  Prefixe_de_Remplissage.s=""
  
  If Forcer_Zero = 1 ; si paramètre facultatif #PB_PrintUsing_ForceZero alors remplir avec de zéros
    If Nbre_Caractere_Format_Partie_Entiere > Nbre_Caractere_Chaine_Partie_Entiere ; Faut-il remplir de zéros ?
      For i=1 To Nbre_Caractere_Format_Partie_Entiere - Nbre_Caractere_Chaine_Partie_Entiere ; si oui, de combien de zéros ?
        Prefixe_de_Remplissage + "0"
      Next i
    EndIf
  EndIf
  
  If Forcer_Etoile = 1 ; si paramètre facultatif #PB_PrintUsing_ForceEtoile alors remplir avec des "*"
    Prefixe_de_Remplissage="" ; au cas où déjà rempli avec des 0
    If Nbre_Caractere_Format_Partie_Entiere > Nbre_Caractere_Chaine_Partie_Entiere ; Faut-il remplir de zéros ?
      For i=1 To Nbre_Caractere_Format_Partie_Entiere - Nbre_Caractere_Chaine_Partie_Entiere ; si oui, de combien de zéros ?
        Prefixe_de_Remplissage + "*"
      Next i
    EndIf
  EndIf
  
  If Forcer_Espace = 1 ; si paramètre facultatif #PB_PrintUsing_ForceEspace alors remplir avec des " "
    If Nbre_Caractere_Format_Partie_Entiere > Nbre_Caractere_Chaine_Partie_Entiere ; Faut-il remplir de zéros ?
      For i=1 To Nbre_Caractere_Format_Partie_Entiere - Nbre_Caractere_Chaine_Partie_Entiere ; si oui, de combien de zéros ?
        Prefixe_de_Remplissage + " "
      Next i
    EndIf
  EndIf
  If Bool(Forcer_Zero*Forcer_Etoile = 1 Or Forcer_Zero*Forcer_Espace = 1 Or Forcer_Etoile*Forcer_Espace = 1 Or Forcer_Zero*Forcer_Etoile*Forcer_Espace = 1 ) ; Avertir qu'on ne peut pas utiliser les 0 et * et espace en même temps
    MessageRequester("Erreur", "Les paramètres #PB_PrintUsing_ForceZero, #PB_PrintUsing_ForceEtoile, #PB_PrintUsing_ForceEspace sont incompatible entre-eux.", 16)
  EndIf ; * est prioritaire
  
  
  Resultat_Partie_Entiere.s ;= Chaine_Partie_Decimale
  CarCh =1
  ; Lire le Format, caractère par caractère
  For CarFo = 1 To Len(Format_Partie_Entiere)
    Car.s = Left(Right(Format_Partie_Entiere,CarFo),1)
    ; Si c'est un "#" alors on place un "chiffre" de Chaine$
    If Car ="#"
      Resultat_Partie_Entiere = Left(Right(Nchaine,CarCh),1) + Resultat_Partie_Entiere
      CarCh+1
    Else ; sinon on place le separateur
      Resultat_Partie_Entiere = Car + Resultat_Partie_Entiere
    EndIf
    
    If CarCh > Len(Nchaine)
      CarFo = Len(Format_Partie_Entiere)
    EndIf
  Next CarFo
  
  
  
  ;----------------------------- Paramètre facultatif Sans_Partie_Décimale ----------------------------------------------------------------------
  If Options & #PB_PrintUsing_NoDecimal ; Ne pas tenir compte de la partie décimale
    Resultat_Partie_Decimale = ""
  EndIf
  
  
  
  ;____________________________ Affichage du Resultat ____________________________________________________________________________________________
  
  ProcedureReturn  Prefix + Sign + Prefixe_de_Remplissage + Resultat_Partie_Entiere + Resultat_Partie_Decimale
  
EndProcedure

;================================================================================================================================================


If OpenWindow(0,0,0,1000,600,"PrintUsing()",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
  EditorGadget(0,10,10,980,580)
  Font1 = LoadFont(#PB_Any, "Arial",10, #PB_Font_Bold) 
  SetGadgetFont(0, FontID(Font1)) 
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"-1234.00"+Chr(34)+", "+Chr(34)+"### ###"+Chr(34) +") => "+ PrintUsing("-1234.00","### ###"))  
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"-1234"+Chr(34)+", "+Chr(34)+"### ###.##"+Chr(34) +") => "+ PrintUsing("-1234","### ###.##"))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"-1234.567"+Chr(34)+", "+Chr(34)+"### ###.##"+Chr(34) +") => "+ PrintUsing("-1234.567","### ###.##"))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"1234567890"+Chr(34)+", "+Chr(34)+"### ###.## ¬"+Chr(34)+", #PB_PrintUsing_Defaut, "+Chr(34)+","+Chr(34)+") => " +  PrintUsing("1234567890","### ###.## ¬", #PB_PrintUsing_Defaut,","))
  ;Euro				  
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"1234567890"+Chr(34)+", "+Chr(34)+"### ###.## €"+Chr(34)+", #PB_PrintUsing_Defaut, "+Chr(34) +","+Chr(34) +") => " + PrintUsing("1234567890","### ###.## €",#PB_PrintUsing_Defaut,","))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"1234567890.56"+Chr(34)+", "+Chr(34)+"#.### %"+Chr(34)+", #PB_PrintUsing_SignPlus, "+Chr(34) +","+Chr(34) +") => " + PrintUsing("1234567890.56","#.### %",#PB_PrintUsing_SignPlus,","))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"0102030405"+Chr(34)+", "+Chr(34)+"Tel :##.##.##.##.##.##"+Chr(34)+", #PB_PrintUsing_NoDecimal" +") => " + PrintUsing("0102030405","Tel : ##.##.##.##.##.##",#PB_PrintUsing_NoDecimal,"."))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"190120121845"+Chr(34)+", "+Chr(34)+"##/##/#### ##h ##'"+Chr(34) +") => " + PrintUsing("190120121845","##/##/#### ##h ##'"))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"1234567890.56"+Chr(34)+", "+Chr(34)+"### ###.### %"+Chr(34)+",#PB_PrintUsing_SignPlus, "+Chr(34)+"<-@->"+Chr(34)+ ") => " + PrintUsing("1234567890.56","### ###.### %",#PB_PrintUsing_SignPlus,"<-@->"))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"1234567890.5"+Chr(34)+", "+Chr(34)+"$###,###.##"+Chr(34) +") => " + PrintUsing("1234567890.5","$###,###.##"))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"12345678905258"+Chr(34)+", "+Chr(34)+"##/## ##:##"+Chr(34) +") => " + PrintUsing("12345678905258","##/## ##:##"))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"12.56"+Chr(34)+", "+Chr(34)+"###.##,#"+Chr(34)+", PB_PrintUsing_ForceZero, "+Chr(34) +","+Chr(34) +") => " + PrintUsing("12.56","###.##",#PB_PrintUsing_ForceZero))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"12.56"+Chr(34)+", "+Chr(34)+"######.##"+Chr(34)+", PB_PrintUsing_ForceEtoile, "+Chr(34) +","+Chr(34) +") => " + PrintUsing("12.56","######.##",#PB_PrintUsing_ForceEtoile))
  AddGadgetItem(0, -1," ")
  ;AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"12.56"+Chr(34)+", "+Chr(34)+"######.##"+Chr(34)+", PB_PrintUsing_ForceZero|#PB_PrintUsing_ForceEtoile, "+Chr(34) +","+Chr(34) +") => " + PrintUsing("12.56","######.##",#PB_PrintUsing_ForceZero|#PB_PrintUsing_ForceEtoile))
  ;AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"12.56"+Chr(34)+", "+Chr(34)+"### ###.##"+Chr(34)+", PB_PrintUsing_SignPlus|#PB_PrintUsing_ForceZero, "+Chr(34) +","+Chr(34) +") => " + PrintUsing("12.56","### ###.##",#PB_PrintUsing_SignPlus|#PB_PrintUsing_ForceZero))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"12.56"+Chr(34)+", "+Chr(34)+"### ###.##"+Chr(34)+", PB_PrintUsing_SignPlus|#PB_PrintUsing_ForceEspace, "+Chr(34) +","+Chr(34) +") => " + PrintUsing("12.56","### ###.##",#PB_PrintUsing_ForceEspace))
  AddGadgetItem(0, -1," ")
  AddGadgetItem(0, -1,"PrintUsing("+Chr(34)+"12.56"+Chr(34)+", "+Chr(34)+"### ###.##"+Chr(34)+", PB_PrintUsing_SignPlus|#PB_PrintUsing_ForceEspace, "+Chr(34) +","+Chr(34) +") => " + PrintUsing("12.56","### ###.##",#PB_PrintUsing_SignPlus|#PB_PrintUsing_ForceEspace)+" petit bug ;)")
  
  
  Debug PrintUsing("-1234.00","### ###") ;=> -1 234
  Debug PrintUsing("-1234","### ###.##") ;=> -1 234.00
  Debug PrintUsing("-1234.567","### ###.##") ;=> -1 234.56
  Debug PrintUsing("1234567890","### ###.## ¬", #PB_PrintUsing_Defaut,",") ;=> 1 234 567 890,00 ¬
  Debug PrintUsing("1234567890","### ###.## €", #PB_PrintUsing_Defaut,",") ;=> 1 234 567 890,00 € ; euro
  Debug PrintUsing("1234567890.56","#.### %",#PB_PrintUsing_SignPlus,",")  ;=> +1234567890,560 %
  Debug PrintUsing("0102030405","Tel : ##.##.##.##.##.##",#PB_PrintUsing_NoDecimal,".") ;=> Tel : 01.02.03.04.05
  Debug PrintUsing("190120121845","##/##/#### ##h ##'")                                 ;=> 19/01/2012 18h 45'
  Debug PrintUsing("1234567890.56","### ###.### %",#PB_PrintUsing_SignPlus,"<-@->")     ;=> +1 234 567 890<-@->560 %
  Debug PrintUsing("1234567890.5","$###,###.##")                                        ;=> $1,234,567,890.50
  Debug PrintUsing("12345678905258","##/## ##:##")                                      ;=> 12/34/56/78/90 52:58
  Debug PrintUsing("12.56","###.##",#PB_PrintUsing_ForceZero)                           ;=> 012.56
  Debug PrintUsing("12.56","######.##",#PB_PrintUsing_ForceEtoile)                      ;=> ****12.56
  Debug PrintUsing("12.56","### ###.##",#PB_PrintUsing_SignPlus|#PB_PrintUsing_ForceZero) ;=> +000012.56	
  Debug PrintUsing("12.56","### ###.##",#PB_PrintUsing_ForceEspace)                      ;=>     12.56
  Debug PrintUsing("12.56","### ###.##",#PB_PrintUsing_SignPlus|#PB_PrintUsing_ForceEspace)+" petit bug ;)" ;=> +    12.56 petit bug ;)
  
  
  
  Repeat 
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

End


; #PB_PrintUsing_Defaut = 1 << 0
; #PB_PrintUsing_SignPlus = 1 << 1
; #PB_PrintUsing_NoDecimal = 1 << 2
; #PB_PrintUsing_ForceZero = 1 << 3
; #PB_PrintUsing_ForceEtoile = 1 << 4
; #PB_PrintUsing_ForceEspace = 1 << 5
; #PB_PrintUsing_Scientific = 1 << 6 toDo

; MessageRequester("PrintUsing()","-1234.00 -> ### ###" + #LFCR$ + PrintUsing("-1234.00","### ###"))  


A optimiser...

M.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: imprimer

Message par Ar-S »

Marc56 a écrit :@Ar-S: Merci :)
Ça ne fonctionne pas (plus) sur mon W10 x64 PB 5.24 LTS x64:
Je n'ai testé qu'en PB x86 sur W10x64 ça marche bien.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: imprimer

Message par Marc56 »

Mesa a écrit :Le formatage des nombres est une question qui revient souvent et avant que PB ne propose une fonction...
...
A optimiser...
Il suffirait d'une fonction qui encapsule printf
et avec son copain scanf on pourrait simplifier fortement le contrôle de saisie utilisateur (pour les allergiques au RegEx)

Y'en a qui vont dire que ça devient du C :mrgreen: mais PRINT USING existe dans tous les Basics :wink:
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: imprimer

Message par Zorro »

La Version a Thyphon est plus concise ;)

Code : Tout sélectionner

Declare.s printusing(txt.s,mask.s,ForceMask.b=#False)

; printusing(Chaine$,MASK$)
; la chaine de sortie sera formaté grace au mask
; les "#" sont remplacés par les elements de la chaine
; par exemple pour séparer le mot "DOBRO" on peut ecrire :
;   Debug printusing("DOBRO","##----###") ; ---> resultat : "DO----BRO"
; les lettres de la chaine "DOBRO" ont remplacées les "#"

Debug printusing("1250","###,###")
Debug printusing("8080000","### ### ### ###")
Debug printusing("26122009","##-##-####")
Debug printusing(RSet(Str(1250333), 9, "0"),"$### ### ###",#True)

Debug""
Debug ""
Debug "Pour Micoute :"
Debug Printusing("010101","##/##/##")
Debug Printusing("31129999","##/##/####")

Debug Printusing("29022011","##/##/####")
Debug Printusing("29022012","##/##/####")
Debug Printusing("31112011","##/##/####")
Debug Printusing("31102011","##/##/####")
Debug Printusing("01010001","##/##/####")


;-Zone Procedures

Procedure.s printusing(txt.s,mask.s,ForceMask.b=#False)
   ; de Thyphoon
   Result.s=""
   Quit=#False
   lt.b=Len(txt)+1
   lm.b=Len(mask)+1
   Repeat
      c.s=Mid(mask,lm,1)
      If c="#" And lt>0
         Result=Mid(txt,lt,1)+Result
         lt=lt-1
         lm=lm-1
         ElseIf c<>"" And lm>0
         Result=c+Result
         lm=lm-1
         Else
         lt=lt-1
         lm=lm-1
      EndIf
   Until (ForceMask=#False And lt<1) Or (ForceMask=#True And lm<1 And lt<1)
   ProcedureReturn Result
EndProcedure

YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: imprimer

Message par YvesRossignol »

Merci infiniment je vais regarder vos commentaires qui ont l'air très intéressant

Yves :D
Yves Rossignol
Répondre