
Je rentre de vacance et je viens de parcourir le forum qui est toujours aussi actif. Vous ne prenez jamais de vacance ?

Il y en a même qui doivent souffrir d'insomnie


Enfin bref, moi j'ai profité des miennes pour faire une petite calculatrice.
C'est vrai quoi ! Le forum de Pure n'en avait pas.

Quand on débute c'est assez simple à programmer. De plus, j'ai fait le listing juste avec la doc de pure car je n'avais pas d'ordinateur avec moi sauf mon psion MX5 qui ne me quitte jamais. En rentrant j'ai tapé le listing et corrigé quelques bugs mais dans l'ensemble je suis assez content du résultat.

Voici le listing du programme:
Code : Tout sélectionner
;---------------------------------------------------
; Good07
; Calculatrice Franc/Euro
; Le 25/08/2004
;---------------------------------------------------
; le bouton Euro permet d'initialiser la frappe en Euro et la somme est convertie en Franc dans l'afficheur du dessus
; le bouton FR inverse le processus
; le bouton Cal permet de passer en mode calculatrice simple avec la simulation d'une bande papier qui imprime les différents calculs
; Au sujet de cette bande, je n'ai pas trouvé d'astuce qui permette de de la faire scroller vers le haut pour que le dernier calcul
; soit toujours visible. Je suis obligé d'utiliser l'ascenseur de la fenêtre pour le faire.(si vous avez une idée !)
; Vous excuserez le manque de commentaire du listing et le nom des variables peu explicite parfois mais décidemment on ne se refait pas.
Global nomb$, franc.b, euro.b, Enomb$, Fnomb$, nb1.f, nb2.f, op.b, operateur$, point.b, cal.b, totoperateur.s, totop.b, texte.s, res$,ligne.b,i.b
franc = 0
euro = 1
cal = 0
totop = 0
;- Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Button_0
#Button_1
#Button_2
#Button_3
#Button_4
#Button_5
#Button_6
#Button_7
#Button_8
#Button_9
#Button_euro
#Button_franc
#Button_pourcent
#Button_C
#Button_div
#Button_mul
#Button_moins
#Button_dec
#Button_egal
#Button_plus
#Button_cal
#String_0
#String_1
#Text_fr
#Text_euro
#Listview_1
#String_cal
EndEnumeration
;- Fonts
;
Global FontID1
FontID1 = LoadFont(1, "DS-Digital", 24)
Global FontID2
FontID2 = LoadFont(2, "DS-Digital", 48)
Procedure Open_Window_0()
If OpenWindow(#Window_0, 349, 236, 557, 427, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar |#PB_Window_ScreenCentered , "Calculatrice Euro/Franc")
If CreateGadgetList(WindowID())
ButtonGadget(#Button_0, 10, 330, 60, 40, "0")
ButtonGadget(#Button_1, 10, 280, 60, 40, "1")
ButtonGadget(#Button_2, 80, 280, 60, 40, "2")
ButtonGadget(#Button_3, 150, 280, 60, 40, "3")
ButtonGadget(#Button_4, 10, 230, 60, 40, "4")
ButtonGadget(#Button_5, 80, 230, 60, 40, "5")
ButtonGadget(#Button_6, 150, 230, 60, 40, "6")
ButtonGadget(#Button_7, 10, 180, 60, 40, "7")
ButtonGadget(#Button_8, 80, 180, 60, 40, "8")
ButtonGadget(#Button_9, 150, 180, 60, 40, "9")
ButtonGadget(#Button_euro, 10, 130, 60, 40, "€")
ButtonGadget(#Button_franc, 80, 130, 60, 40, "FR")
ButtonGadget(#Button_pourcent, 150, 130, 60, 40, "%")
ButtonGadget(#Button_C, 220, 130, 60, 40, "C")
ButtonGadget(#Button_div, 220, 180, 60, 40, "/")
ButtonGadget(#Button_mul, 220, 230, 60, 40, "X")
ButtonGadget(#Button_moins, 220, 280, 60, 40, "-")
ButtonGadget(#Button_dec, 80, 330, 60, 40, ".")
ButtonGadget(#Button_egal, 150, 330, 60, 40, "=")
ButtonGadget(#Button_plus, 220, 330, 60, 40, "+")
ButtonGadget(#Button_cal, 10, 380, 60, 40, "CAL")
StringGadget(#String_0, 10, 80, 270, 40, "0", #PB_String_ReadOnly | #PB_String_Numeric | #PB_Text_Right)
SetGadgetFont(#String_0, FontID1)
StringGadget(#String_1, 10, 30, 270, 40, "", #PB_String_ReadOnly | #PB_String_Numeric | #PB_Text_Right)
SetGadgetFont(#String_1, FontID1)
TextGadget(#Text_fr, 280, 50, 30, 20, "FR", #PB_Text_Center)
TextGadget(#Text_euro, 280, 100, 30, 20, "€", #PB_Text_Center)
ListViewGadget(#Listview_1, 290, 130, 260, 290)
StringGadget(#String_cal, 10, 40, 540, 70, "0", #PB_String_ReadOnly | #PB_String_Numeric | #PB_Text_Right)
SetGadgetFont(#String_cal, FontID2)
EndIf
EndIf
EndProcedure
Procedure affichage()
If franc = 1 And cal = 0
nomb.f = ValF(GetGadgetText(#String_0)) / 6.55957
Enomb$ = StrF(nomb.f, 2)
SetGadgetText(#String_1, Enomb$)
EndIf
If euro = 1 And cal = 0
nomb.f = ValF(GetGadgetText(#String_0)) * 6.55957
Fnomb$ = StrF(nomb.f, 2)
SetGadgetText(#String_1, Fnomb$)
EndIf
EndProcedure
Procedure calculette()
If nb1.f <> 0
nb2.f = ValF(GetGadgetText(#String_cal))
Select operateur$
Case "-"
nb1 = nb1 - nb2
Case "+"
nb1 = nb1 + nb2
Case "X"
nb1 = nb1 * nb2
Case "/"
If nb2 = 0
MessageRequester("Erreur !", "Division par zéro !", 1)
nb1 = 0
Else
nb1 = nb1 / nb2
EndIf
EndSelect
op = 0
Else
nb1 = ValF(GetGadgetText(#String_cal))
EndIf
If nb1 - Int(nb1) <> 0
SetGadgetText(#String_cal, StrF(nb1, 11))
Else
SetGadgetText(#String_cal, StrF(nb1, 0))
EndIf
affichage()
point = 0
EndProcedure
Procedure calcul()
If nb1.f <> 0
nb2.f = ValF(GetGadgetText(#String_0))
Select operateur$
Case "-"
nb1 = nb1 - nb2
Case "+"
nb1 = nb1 + nb2
Case "X"
nb1 = nb1 * nb2
Case "/"
If nb2 = 0
MessageRequester("Erreur !", "Division par zéro !", 1)
nb1 = 0
Else
nb1 = nb1 / nb2
EndIf
EndSelect
op = 0
Else
nb1 = ValF(GetGadgetText(#String_0))
EndIf
If nb1 - Int(nb1) <> 0
SetGadgetText(#String_0, StrF(nb1, 2))
Else
SetGadgetText(#String_0, StrF(nb1, 0))
EndIf
affichage()
point = 0
EndProcedure
Procedure ajoutligne(); gestion de la bande papier du mode calculatrice
If totop = 0
texte = "------------------------------------------"
date$ = FormatDate("%dd,%mm,%yyyy,%hh,%ii", Date())
AddGadgetItem(#Listview_1, -1, texte)
AddGadgetItem(#Listview_1, -1, date$)
AddGadgetItem(#Listview_1, -1, texte)
EndIf
If totop = 1
AddGadgetItem(#Listview_1, -1, nomb$)
Else
texte = Mid(totoperateur, totop - 1, 1) + " " + nomb$
AddGadgetItem(#Listview_1, -1, texte)
EndIf
ligne=ligne+1
SendMessage_(#Listview_1,#LB_SETTOPINDEX,ligne,0)
EndProcedure
Procedure init()
nomb$ = ""
Enomb$ = ""
Fnomb$ = ""
res$ = ""
nb1.f = 0
nb2.f = 0
res.f = 0
point = 0
op = 0
totoperateur = ""
totop = 0
If cal = 0
SetGadgetText(#String_0, "0")
SetGadgetText(#String_1, "0")
ElseIf cal = 1
SetGadgetText(#String_cal, "0")
ajoutligne()
EndIf
EndProcedure
Procedure touche(touch$)
nomb$ = nomb$ + touch$
If cal = 0
SetGadgetText(#String_0, nomb$)
affichage()
Else
SetGadgetText(#String_cal, nomb$)
EndIf
op = 0
EndProcedure
Procedure pourcentage()
If cal = 1 And operateur$ = "X"
nb2.f = ValF(GetGadgetText(#String_cal))
res.f = (nb1.f * nb2.f) / 100
res$ = StrF(res.f, 2)
SetGadgetText(#String_cal, res$)
ElseIf cal = 0 And operateur$ = "X"
nb2.f = ValF(GetGadgetText(#String_0))
res.f = (nb1.f * nb2.f) / 100
res$ = StrF(res.f, 2)
SetGadgetText(#String_0, res$)
affichage()
EndIf
If cal = 1 And operateur$ = "+"
nb2.f = ValF(GetGadgetText(#String_cal))
res.f = ((nb1.f * nb2.f) / 100) + nb1.f
res$ = StrF(res.f, 2)
SetGadgetText(#String_cal, res$)
ElseIf cal = 0 And operateur$ = "+"
nb2.f = ValF(GetGadgetText(#String_0))
res.f = ((nb1.f * nb2.f) / 100) + nb1.f
res$ = StrF(res.f, 2)
SetGadgetText(#String_0, res$)
affichage()
EndIf
If cal = 1 And operateur$ = "-"
nb2.f = ValF(GetGadgetText(#String_cal))
res.f = nb1.f - ((nb1.f * nb2.f) / 100)
res$ = StrF(res.f, 2)
SetGadgetText(#String_cal, res$)
ElseIf cal = 0 And operateur$ = "-"
nb2.f = ValF(GetGadgetText(#String_0))
res.f = nb1.f - ((nb1.f * nb2.f) / 100)
res$ = StrF(res.f, 2)
SetGadgetText(#String_0, res$)
affichage()
EndIf
If cal = 1 And operateur$ = "/"
nb2.f = ValF(GetGadgetText(#String_cal))
res.f = (nb1.f / nb2.f) * 100
res$ = StrF(res.f, 2)
SetGadgetText(#String_cal, res$)
ElseIf cal = 0 And operateur$ = "/"
nb2.f = ValF(GetGadgetText(#String_0))
res.f = (nb1.f / nb2.f) * 100
res$ = StrF(res.f, 2)
SetGadgetText(#String_0, res$)
affichage()
EndIf
EndProcedure
Open_Window_0()
HideGadget(#Listview_1, 1)
HideGadget(#String_cal, 1)
ResizeWindow(319, 427)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Pad0,0)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Pad1,1)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Pad2,2)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Pad3,3)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Pad4,4)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Pad5,5)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Pad6,6)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Pad7,7)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Pad8,8)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Pad9,9)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Decimal,10)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Divide,11)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Multiply,12)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Add,13)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Subtract,14)
;AddKeyboardShortcut(#Window_0,#PB_Shortcut_Decimal,10)
Repeat
Event = WaitWindowEvent()
clavier=EventMenuID()
If clavier=0
If nomb$ = "" And nomb$ <> "0."
nomb$ = "0."
If cal = 0
SetGadgetText(#String_0, nomb$)
Else
SetGadgetText(#String_cal, nomb$)
EndIf
point = 1
affichage()
Else
touche("0")
EndIf
EndIf
If clavier=1
touche("1")
EndIf
If clavier=2
touche("2")
EndIf
If clavier=3
touche("3")
EndIf
If clavier=4
touche("4")
EndIf
If clavier=5
touche("5")
EndIf
If clavier=6
touche("6")
EndIf
If clavier=7
touche("7")
EndIf
If clavier=8
touche("8")
EndIf
If clavier=9
touche("9")
EndIf
If clavier=10
If nomb$ = ""
nomb$ = "0."
SetGadgetText(#String_0, nomb$)
point = 1
affichage()
EndIf
If nomb$ <> "" And point = 0
nomb$ = nomb$ + "."
SetGadgetText(#String_0, nomb$)
point = 1
EndIf
EndIf
If Event = #PB_EventGadget
Select EventGadgetID()
Case #Button_0
touche("0")
Case #Button_1
If nomb$ = "" And nomb$ <> "0."
nomb$ = "0."
If cal = 0
SetGadgetText(#String_0, nomb$)
Else
SetGadgetText(#String_cal, nomb$)
EndIf
point = 1
affichage()
Else
touche("1")
EndIf
Case #Button_2
touche("2")
Case #Button_3
touche("3")
Case #Button_4
touche("4")
Case #Button_5
touche("5")
Case #Button_6
touche("6")
Case #Button_7 ;
touche("7")
Case #Button_8
touche("8")
Case #Button_9
touche("9")
Case #Button_euro
If cal = 0
franc = 0
euro = 1
SetGadgetText(#Text_euro, "€")
SetGadgetText(#Text_fr, "FR")
ElseIf cal = 1
ResizeWindow(319, 427)
HideGadget(#String_0, 0)
HideGadget(#String_1, 0)
HideGadget(#Text_fr, 0)
HideGadget(#Text_euro, 0)
HideGadget(#String_cal, 1)
HideGadget(#Listview_1, 1)
franc = 0
euro = 1
SetGadgetText(#Text_euro, "€")
SetGadgetText(#Text_fr, "FR")
cal = 0
EndIf
Case #Button_franc
If cal = 0
franc = 1
euro = 0
SetGadgetText(#Text_euro, "FR")
SetGadgetText(#Text_fr, "€")
ElseIf cal = 1
ResizeWindow(319, 427)
HideGadget(#String_0, 0)
HideGadget(#String_1, 0)
HideGadget(#Text_fr, 0)
HideGadget(#Text_euro, 0)
HideGadget(#String_cal, 1)
HideGadget(#Listview_1, 1)
franc = 1
euro = 0
SetGadgetText(#Text_euro, "FR")
SetGadgetText(#Text_fr, "€")
cal = 0
EndIf
Case #Button_pourcent
pourcentage()
Case #Button_C
init()
Case #Button_div
If op = 0 And cal = 0
calcul()
Else
calculette()
EndIf
operateur$ = "/"
If cal = 1
totoperateur = totoperateur + operateur$
totop = totop + 1
ajoutligne()
EndIf
nomb$ = ""
op = 1
Case #Button_mul
If op = 0 And cal = 0
calcul()
Else
calculette()
EndIf
operateur$ = "X"
If cal = 1
totoperateur = totoperateur + operateur$
totop = totop + 1
ajoutligne()
EndIf
nomb$ = ""
op = 1
Case #Button_moins
If op = 0 And cal = 0
calcul()
Else
calculette()
EndIf
operateur$ = "-"
If cal = 1
totoperateur = totoperateur + operateur$
totop = totop + 1
ajoutligne()
EndIf
nomb$ = ""
op = 1
Case #Button_dec
If nomb$ = ""
nomb$ = "0."
SetGadgetText(#String_0, nomb$)
point = 1
affichage()
EndIf
If nomb$ <> "" And point = 0
nomb$ = nomb$ + "."
SetGadgetText(#String_0, nomb$)
point = 1
EndIf
Case #Button_egal
If cal = 0
calcul()
Else
calculette()
EndIf
If cal = 1
totoperateur = totoperateur + "="
totop = totop + 1
ajoutligne()
AddGadgetItem(#Listview_1, -1, "= " + GetGadgetText(#String_cal))
EndIf
nb1 = 0
operateur$ = ""
point = 0
Case #Button_plus
If op = 0 And cal = 0
calcul()
Else
calculette()
EndIf
operateur$ = "+"
If cal = 1
totoperateur = totoperateur + operateur$
totop = totop + 1
ajoutligne()
EndIf
nomb$ = ""
op = 1
Case #Button_cal
cal = 1
init()
ResizeWindow(557, 427)
HideGadget(#String_0, 1)
HideGadget(#String_1, 1)
HideGadget(#Text_fr, 1)
HideGadget(#Text_euro, 1)
HideGadget(#String_cal, 0)
HideGadget(#Listview_1, 0)
ClearGadgetItemList(#Listview_1)
ajoutligne()
EndSelect
EndIf
Until Event = #PB_EventCloseWindow
End




Au fait elle accepte le calcul en chaine du genre :
2x4+78/89-456=-447,...
Bon calcul à tous !
et n'hésitez pas à faire des commentaires
