Voici une nouvelle version.
Épurer au maximum.
Par contre ça m’ennuie que le compilateur créer des fichier à chaque fois mais peut être n'est-je pas le choix ?
Car a chaque vérification ou validation il dois compiler et créer donc des fichier.
Code : Tout sélectionner
; Editeur D'expression 1.40
; Créer par Monsieur Dieppedalle David le 14/02/2017.
;{- Enumerations / DataSections
;{ Windows
Enumeration
#FenetreEditeurExpression
EndEnumeration
;}
;{ Gadgets
Enumeration
#Texte_Info_Editeur_Resultat
#Texte_Info_Editeur_Expression
#Texte_Info_Sortie_Editeur_Expression
#Texte_Info_Panel
#Editeur_Expression
#Editeur_Resultat
#Panel
#Boutton_0
#Boutton_1
#Boutton_2
#Boutton_3
#Boutton_4
#Boutton_5
#Boutton_6
#Boutton_7
#Boutton_8
#Boutton_9
#Boutton_Point
#Boutton_Or
#Boutton_Xor
#Boutton_And
#Boutton_Divise
#Boutton_Parenthese
#Boutton_Plus
#Boutton_Moins
#Boutton_Multiplie
#Boutton_Inferieur
#Boutton_Superieur_Ou_Egale
#Boutton_Inferieur_Ou_Egale
#Boutton_Decalage_Droite
#Boutton_Decalage_Gauche
#Boutton_Superieur
#Boutton_Not
#Boutton_Modulo_Binaire
#Boutton_Exponentiel
#Boutton_Hexadecimal
#Boutton_Different
#Boutton_Egale
#OptionGadget_Sortie_Entier_Signe
#OptionGadget_Sortie_Entier_Non_Signe
#OptionGadget_Sortie_Float
#OptionGadget_Sortie_Double
#OptionGadget_Sortie_Hexadecimale
#OptionGadget_Sortie_Binaire
#Boutton_Verifier
#Boutton_Valider
#Boutton_Annuler
EndEnumeration
;}
;{ Fonts
Enumeration
#Font_Texte_Info_Editeur_Resultat
#Font_Texte_Info_Editeur_Expression
#Font_Texte_Info_Sortie_Editeur_Expression
#Font_Texte_Info_Panel
#Font_Editeur_Expression
#Font_Editeur_Resultat
#Font_Panel
#Font_OptionGadget
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Global ErreurCompilation = 0
Global MessageErreur$ = ""
Global Sortie$ = ""
Global ModeSortieResultat$ = "Str"
Global Resultat$ = ""
;}
Procedure.b AppelCompilateur()
If CreateFile(1, "CodeSource.pb")
Select ModeSortieResultat$
Case "Str"
WriteString(1, "CreateFile(1, " + Chr(34) + "Resultat.txt" + Chr(34) + "): WriteString(1, Str(" + GetGadgetText(#Editeur_Expression) + ")): CloseFile(1)")
Case "StrU"
WriteString(1, "CreateFile(1, " + Chr(34) + "Resultat.txt" + Chr(34) + "): WriteString(1, StrU(" + GetGadgetText(#Editeur_Expression) + ")): CloseFile(1)")
Case "StrF"
WriteString(1, "CreateFile(1, " + Chr(34) + "Resultat.txt" + Chr(34) + "): WriteString(1, StrF(" + GetGadgetText(#Editeur_Expression) + ")): CloseFile(1)")
Case "StrD"
WriteString(1, "CreateFile(1, " + Chr(34) + "Resultat.txt" + Chr(34) + "): WriteString(1, StrD(" + GetGadgetText(#Editeur_Expression) + ")): CloseFile(1)")
Case "Hex"
WriteString(1, "CreateFile(1, " + Chr(34) + "Resultat.txt" + Chr(34) + "): WriteString(1, Hex(" + GetGadgetText(#Editeur_Expression) + ")): CloseFile(1)")
Case "Bin"
WriteString(1, "CreateFile(1, " + Chr(34) + "Resultat.txt" + Chr(34) + "): WriteString(1, Bin(" + GetGadgetText(#Editeur_Expression) + ")): CloseFile(1)")
EndSelect
CloseFile(1)
Else
MessageRequester("Erreur !", "Impossible d'écrire le code source !", 16)
EndIf
Delay(10) ; Histoire de laisser souffler un peu le fichier.
Compilateur = RunProgram(#PB_Compiler_Home + "/Compilers/pbcompiler", "CodeSource.pb", GetCurrentDirectory(), #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
Sortie$ = ""
MessageErreur$ = ""
Resultat$ = ""
If Compilateur
While ProgramRunning(Compilateur)
If AvailableProgramOutput(Compilateur)
Sortie$ = ReadProgramString(Compilateur)
If FindString(Sortie$, "Line")
MessageErreur$ = Sortie$ + Chr(13)
Else
MessageErreur$ = "Pas d'erreurs !"
EndIf
EndIf
Wend
ErreurCompilation = ProgramExitCode(Compilateur)
CloseProgram(Compilateur) ; Ferme la connection vers le programme
Delay(10) ; Histoire de laisser souffler un peu le programme.
DeleteFile(GetCurrentDirectory() + "CodeSource.pb")
DeleteFile(GetCurrentDirectory() + "PureBasic.exe")
If Bool(Not ErreurCompilation) ; Not, inversion de valeur, 0 = 1 et 1 = 0. 0 = pas d'erreurs, 1 = erreurs
If ReadFile(1, GetCurrentDirectory() + "Resultat.txt")
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
Resultat$ + ReadString(1) ; Affiche du fichier
Wend
CloseFile(1)
Else
MessageRequester("Erreur !", "Impossible d'afficher le résultat !", 16)
EndIf
EndIf
Delay(10) ; Histoire de laisser souffler un peu le fichier.
DeleteFile(GetCurrentDirectory() + "Resultat.txt")
ProcedureReturn Bool(Not ErreurCompilation) ; Not, inversion de valeur, 0 = 1 et 1 = 0. 0 = pas d'erreurs, 1 = erreurs
EndIf
EndProcedure
Procedure OpenWindow_FenetreEditeurExpression()
If OpenWindow(#FenetreEditeurExpression, 400, 159, 500, 625, "Editeur D'expression 1.40", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
; Création des Gadgets:
TextGadget(#Texte_Info_Editeur_Expression, 10, 6, 480, 17, "Entrez votre Expression Mathématique:", #PB_Text_Center)
SetGadgetFont(#Texte_Info_Editeur_Expression, LoadFont(#Font_Texte_Info_Editeur_Expression, "Times New Roman", 12, #PB_Font_Bold|#PB_Font_HighQuality))
SetGadgetColor(#Texte_Info_Editeur_Expression, #PB_Gadget_FrontColor, RGB(0, 0, 200))
EditorGadget(#Editeur_Expression, 10, 27, 480, 215, #PB_Editor_WordWrap)
SetGadgetFont(#Editeur_Expression, LoadFont(#Font_Editeur_Expression, "Microsoft Sans Serif", 8, #PB_Font_HighQuality))
SetGadgetColor(#Editeur_Expression, #PB_Gadget_FrontColor, RGB(0, 0, 0))
TextGadget(#Texte_Info_Sortie_Editeur_Expression, 10, 250, 40, 17, "Sortie:", #PB_Text_Center)
SetGadgetFont(#Texte_Info_Sortie_Editeur_Expression, LoadFont(#Font_Texte_Info_Sortie_Editeur_Expression, "Times New Roman", 9, #PB_Font_Bold|#PB_Font_HighQuality))
SetGadgetColor(#Texte_Info_Sortie_Editeur_Expression, #PB_Gadget_FrontColor, RGB(0, 0, 200))
Font_OptionGadget = LoadFont(#Font_OptionGadget, "Times New Roman", 9, #PB_Font_HighQuality)
OptionGadget(#OptionGadget_Sortie_Entier_Signe, 100, 250, 80, 15, "- Entier Signé")
SetGadgetFont(#OptionGadget_Sortie_Entier_Signe, Font_OptionGadget)
OptionGadget(#OptionGadget_Sortie_Entier_Non_Signe, 215, 250, 110, 15, "- Entier Non Signé")
SetGadgetFont(#OptionGadget_Sortie_Entier_Non_Signe, Font_OptionGadget)
OptionGadget(#OptionGadget_Sortie_Float, 365, 250, 50, 15, "- Float")
SetGadgetFont(#OptionGadget_Sortie_Float, Font_OptionGadget)
OptionGadget(#OptionGadget_Sortie_Double, 100, 270, 60, 15, "- Double")
SetGadgetFont(#OptionGadget_Sortie_Double, Font_OptionGadget)
OptionGadget(#OptionGadget_Sortie_Hexadecimale, 215, 270, 95, 15, "- Hexadecimale")
SetGadgetFont(#OptionGadget_Sortie_Hexadecimale, Font_OptionGadget)
OptionGadget(#OptionGadget_Sortie_Binaire, 365, 270, 60, 15, "- Binaire")
SetGadgetFont(#OptionGadget_Sortie_Binaire, Font_OptionGadget)
SetGadgetState(#OptionGadget_Sortie_Entier_Signe, #True)
TextGadget(#Texte_Info_Editeur_Resultat, 10, 300, 480, 17, "Résultat de sortie:", #PB_Text_Center)
SetGadgetFont(#Texte_Info_Editeur_Resultat, LoadFont(#Font_Texte_Info_Editeur_Resultat, "Times New Roman", 12, #PB_Font_Bold|#PB_Font_HighQuality))
SetGadgetColor(#Texte_Info_Editeur_Resultat, #PB_Gadget_FrontColor, RGB(255, 150, 0))
EditorGadget(#Editeur_Resultat, 10, 320, 480, 17, #PB_Editor_ReadOnly)
SetGadgetFont(#Editeur_Resultat, LoadFont(#Font_Editeur_Resultat, "Microsoft Sans Serif", 8, #PB_Font_HighQuality))
SetGadgetColor(#Editeur_Resultat, #PB_Gadget_FrontColor, RGB(0, 150, 0))
TextGadget(#Texte_Info_Panel, 10, 355, 480, 17, "Panel des commandes:", #PB_Text_Center)
SetGadgetFont(#Texte_Info_Panel, LoadFont(#Font_Texte_Info_Panel, "Times New Roman", 12, #PB_Font_Bold|#PB_Font_HighQuality))
SetGadgetColor(#Texte_Info_Panel, #PB_Gadget_FrontColor, RGB(200, 50, 0))
PanelGadget(#Panel, 10, 375, 480, 200)
SetGadgetFont(#Panel, LoadFont(#Font_Panel, "Microsoft Sans Serif", 8, #PB_Font_HighQuality))
AddGadgetItem(#Panel, -1, "Basique")
ButtonGadget(#Boutton_0, 25, 115, 70, 30, "0")
GadgetToolTip(#Boutton_0, "0")
ButtonGadget(#Boutton_Point, 95, 115, 35, 30, ".")
GadgetToolTip(#Boutton_Point, ".")
ButtonGadget(#Boutton_1, 25, 85, 35, 30, "1")
GadgetToolTip(#Boutton_1, "1")
ButtonGadget(#Boutton_2, 60, 85, 35, 30, "2")
GadgetToolTip(#Boutton_2, "2")
ButtonGadget(#Boutton_3, 95, 85, 35, 30, "3")
GadgetToolTip(#Boutton_3, "3")
ButtonGadget(#Boutton_4, 25, 55, 35, 30, "4")
GadgetToolTip(#Boutton_4, "4")
ButtonGadget(#Boutton_5, 60, 55, 35, 30, "5")
GadgetToolTip(#Boutton_5, "5")
ButtonGadget(#Boutton_6, 95, 55, 35, 30, "6")
GadgetToolTip(#Boutton_6, "6")
ButtonGadget(#Boutton_7, 25, 25, 35, 30, "7")
GadgetToolTip(#Boutton_7, "7")
ButtonGadget(#Boutton_8, 60, 25, 35, 30, "8")
GadgetToolTip(#Boutton_8, "8")
ButtonGadget(#Boutton_9, 95, 25, 35, 30, "9")
GadgetToolTip(#Boutton_9, "9")
ButtonGadget(#Boutton_Plus, 145, 115, 35, 30, "+")
GadgetToolTip(#Boutton_Plus, "Addition")
ButtonGadget(#Boutton_Moins, 145, 85, 35, 30, "-")
GadgetToolTip(#Boutton_Moins, "Soustraction")
ButtonGadget(#Boutton_Multiplie, 145, 55, 35, 30, "*")
GadgetToolTip(#Boutton_Multiplie, "Multiplication")
ButtonGadget(#Boutton_Divise, 145, 25, 35, 30, "/")
GadgetToolTip(#Boutton_Divise, "Division")
ButtonGadget(#Boutton_Parenthese, 180, 115, 35, 30, "()")
GadgetToolTip(#Boutton_Parenthese, "Parenthèses")
ButtonGadget(#Boutton_Hexadecimal, 180, 85, 35, 30, "$")
GadgetToolTip(#Boutton_Hexadecimal, "Hexadecimal")
ButtonGadget(#Boutton_Modulo_Binaire, 180, 55, 35, 30, "%")
GadgetToolTip(#Boutton_Modulo_Binaire, "Modulo / Binaire")
ButtonGadget(#Boutton_Exponentiel, 180, 25, 35, 30, "^")
GadgetToolTip(#Boutton_Exponentiel, "Exponentiel")
CloseGadgetList()
ButtonGadget(#Boutton_Verifier, 100, 585, 100, 30, "Verifier")
ButtonGadget(#Boutton_Valider, 200, 585, 100, 30, "Valider")
ButtonGadget(#Boutton_Annuler, 300, 585, 100, 30, "Annuler")
SetActiveGadget(#Editeur_Expression)
EndIf
EndProcedure
OpenWindow_FenetreEditeurExpression()
;{- Event loop
Repeat ; Départ des évènements de boucle
Event = WaitWindowEvent(1) ; Cette ligne attend pendent (Minuteur) qu'un évènement soit recus par la fenêtre
EventWindow = EventWindow(); La fenêtre ou l'évènement c'est produit
EventGadget = EventGadget(); Pour savoir sur quel gadget c'est produis l'évènement
EventMenu = EventMenu() ; Pour savoir sur quel menue c'est produis l'évènement
EventType = EventType() ; Le type d'évènement qui c'est produis sur le gadget
Select Event
Case #PB_Event_Gadget
Select EventGadget
Case #Boutton_0
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "0")
Case #Boutton_1
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "1")
Case #Boutton_2
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "2")
Case #Boutton_3
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "3")
Case #Boutton_4
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "4")
Case #Boutton_5
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "5")
Case #Boutton_6
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "6")
Case #Boutton_7
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "7")
Case #Boutton_8
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "8")
Case #Boutton_9
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "9")
Case #Boutton_Point
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, ".")
Case #Boutton_Parenthese
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "()")
Case #Boutton_Plus
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "+")
Case #Boutton_Moins
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "-")
Case #Boutton_Multiplie
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "*")
Case #Boutton_Divise
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "/")
Case #Boutton_Modulo_Binaire
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "%")
Case #Boutton_Exponentiel
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "Pow(Nombre, Puissance)")
Case #Boutton_Hexadecimal
SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "$")
Case #Editeur_Expression
If FindString(GetGadgetText(#Editeur_Expression), Chr(10)) Or FindString(GetGadgetText(#Editeur_Expression), Chr(13))
SetGadgetText(#Editeur_Expression, ReplaceString(ReplaceString(GetGadgetText(#Editeur_Expression), Chr(10), ""), Chr(13), ""))
keybd_event_(#VK_END,0,0,0)
keybd_event_(#VK_END,0,2,0)
EndIf
Case #OptionGadget_Sortie_Entier_Signe
ModeSortieResultat$ = "Str"
Case #OptionGadget_Sortie_Entier_Non_Signe
ModeSortieResultat$ = "StrU"
Case #OptionGadget_Sortie_Float
ModeSortieResultat$ = "StrF"
Case #OptionGadget_Sortie_Double
ModeSortieResultat$ = "StrD"
Case #OptionGadget_Sortie_Hexadecimale
ModeSortieResultat$ = "Hex"
Case #OptionGadget_Sortie_Binaire
ModeSortieResultat$ = "Bin"
Case #Boutton_Verifier
If GetGadgetText(#Editeur_Expression) > ""
If AppelCompilateur()
MessageRequester("Résultat...", MessageErreur$, 64)
SetGadgetText(#Editeur_Resultat, Resultat$)
Else
MessageRequester("Résultat...", MessageErreur$, 16)
SetGadgetText(#Editeur_Resultat, "Opperation non valide !")
EndIf
EndIf
Case #Boutton_Valider
If GetGadgetText(#Editeur_Expression) > ""
If AppelCompilateur()
MessageRequester("Sortie...", "Le resultat de sortie est: " + Resultat$, 64)
CloseWindow(#FenetreEditeurExpression)
Break
Else
ClearGadgetItems(#Editeur_Resultat)
SetGadgetText(#Editeur_Resultat, "Opperation non valide !")
MessageRequester("Résultat...", MessageErreur$, 16)
EndIf
EndIf
Case #Boutton_Annuler
Event = #PB_Event_CloseWindow
CloseWindow(#FenetreEditeurExpression)
Break
EndSelect
Case #PB_Event_Menu
Select EventMenu
Case 0
EndSelect
Case #PB_Event_CloseWindow
EndSelect
Until Event = #PB_Event_CloseWindow ; Fin des évènements de boucle
;
;}