Attention, utiliser une version non Unicode de PB !
5.44 x64 bits LTS est conseillé ou toute autre version non Unicode !
Je vous présente mon éditeur d'expression, il n'est
pas encore fini mais déjà vous pouvez l'utiliser, je vais le peaufiner !
Il accepte toutes expressions numérique.
Les fonctions Math ainsi que toutes fonction renvoyant un nombre sont accepté.
J'utilise le compilateur de PB, c'est lui qui se charge de vérifier que l'expression
est valide. Si valide elle est, la valeur de retour est renvoyer.
Voici un petit exemple:
Code : Tout sélectionner
47 * (48 + 98 / (24 /5)) + 99 * (99 + CountString("abcdefABCDEF", "a") - 24) * Round(987, #PB_Round_Down) / (45 * 76)
Code : Tout sélectionner
; Editeur D'expression 1.30
; Créer par Monsieur Dieppedalle David le 14/02/2017.
;{- Enumerations / DataSections
;{ Windows
Enumeration
#FenetreEditeurExpression
EndEnumeration
;}
;{ Gadgets
Enumeration
#Texte_Info_Editeur_Resultat
#Editeur_Expression
#Texte_Info_Editeur_Expression
#Editeur_Resultat
#Texte_Info_Panel
#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
#Boutton_Verifier
#Boutton_Valider
#Boutton_Annuler
EndEnumeration
;}
;{ Fonts
Enumeration
#Font_Texte_Info_Editeur_Resultat
#Font_Editeur_Expression
#Font_Editeur_Resultat
#Font_Texte_Info_Editeur_Expression
#Font_Texte_Info_Panel
#Font_Panel
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Global ErreurCompilation = 0
Global ErreurCode = 0
Global MessageErreur$ = ""
Global Sortie$ = ""
;}
Procedure AppelCompilateur()
Compilateur = RunProgram(#PB_Compiler_Home + "/Compilers/pbcompiler", "Compilation.pb", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
Sortie$ = ""
MessageErreur$ = ""
If Compilateur
While ProgramRunning(Compilateur)
If AvailableProgramOutput(Compilateur)
Tmp$ = ReadProgramString(Compilateur)
If FindString(Tmp$, "Line")
MessageErreur$ = Tmp$ + Chr(13)
EndIf
EndIf
Wend
ErreurCompilation = ProgramExitCode(Compilateur)
CloseProgram(Compilateur) ; Ferme la connection vers le programme
EndIf
Delay(25)
If ReadFile(1, "Log Compilation.txt")
MessageErreur$ + ReadString(1)
CloseFile(1)
EndIf
EndProcedure
Procedure.s VerifieExpression(AlertErreur.b = #True, RetourResultat.b = #True)
If CreateFile(1, "Code Source.pb")
WriteString(1, "CreateFile(1, " + Chr(34) + "Résultat.txt" + Chr(34) + "): WriteString(1, StrD(" + GetGadgetText(#Editeur_Expression) + ")): CloseFile(1)")
CloseFile(1)
Else
MessageRequester("Erreur !", "Impossible d'écrire le code source !", 16)
EndIf
AppelCompilateur()
Delay(25)
If AlertErreur = #True
ClearGadgetItems(#Editeur_Resultat)
MessageRequester("Résultat...", MessageErreur$, 64)
EndIf
DeleteFile("Log Compilation.txt")
DeleteFile("Code Source.pb")
DeleteFile("PureBasic.exe")
If MessageErreur$ = "Pas d'érreurs !"
If ReadFile(1, "Résultat.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
If RetourResultat = #True
SetGadgetText(#Editeur_Resultat, Resultat$)
EndIf
CloseFile(1)
DeleteFile("Résultat.txt")
Else
MessageRequester("Erreur !", "Impossible d'afficher le résultat !", 16)
EndIf
If RetourResultat = #True
ProcedureReturn Resultat$
EndIf
Else
SetGadgetText(#Editeur_Resultat, "Oppération non valide !")
EndIf
EndProcedure
Procedure OpenWindow_FenetreEditeurExpression()
If OpenWindow(#FenetreEditeurExpression, 400, 159, 500, 575, "Editeur D'expression 1.30", #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_Editeur_Resultat, 10, 255, 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, 275, 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, 310, 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, 330, 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, 537, 100, 30, "Verifier")
ButtonGadget(#Boutton_Valider, 200, 537, 100, 30, "Valider")
ButtonGadget(#Boutton_Annuler, 300, 537, 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, "^")
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 #Boutton_Verifier
If GetGadgetText(#Editeur_Expression) > ""
VerifieExpression(#True, #True)
EndIf
Case #Boutton_Valider
If GetGadgetText(#Editeur_Expression) > ""
Resultat$ = VerifieExpression(#False, #True)
EndIf
CloseWindow(#FenetreEditeurExpression)
Break
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
;
;}
Code : Tout sélectionner
Global Fin = 0
Procedure ErrorHandler()
If CreateFile(1, "Log Compilation.txt")
WriteString(1, ErrorMessage())
CloseFile(1)
Else
MessageRequester("Erreur !", "Impossible d'écrire le Log !", 16)
EndIf
Fin = 1
EndProcedure
OnErrorCall(@ErrorHandler())
IncludeFile "Code Source.pb"
If Fin = 0
If CreateFile(1, "Log Compilation.txt")
WriteString(1, "Pas d'érreurs !")
CloseFile(1)
Else
MessageRequester("Erreur !", "Impossible d'écrire le Log !", 16)
EndIf
EndIf
https://www.dropbox.com/s/eudb1nvn1ilvs ... on.7z?dl=0