Page 1 sur 3

Editeur D'expression

Publié : mar. 14/févr./2017 22:25
par Shadow
Salut,

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.

Image

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)
Et les codes:

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
                                    ;
                                    ;}
Nommez ce fichier Compilation.pb et placez-le au même endroit que le code précédent.

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
L'archive au cas ou:
https://www.dropbox.com/s/eudb1nvn1ilvs ... on.7z?dl=0

Re: Editeur D'expression

Publié : mar. 14/févr./2017 23:29
par falsam
Je tape 1 + 1 que je vérifie en cliquant sur le bouton adéquat et effectivement je n'ai pas d'erreur.

Si j'ai bien compris tu crées un fichier source qui contiendra

Code : Tout sélectionner

CreateFile(1, "Résultat.txt"): WriteString(1, StrD(1 + 1)): CloseFile(1)
et c'est ce fichier que tu compiles avec PureBasic pour voir si il y a des erreurs.

Pas contre pas de résultat, ce qui est normal puisque tu cherche à ouvrir le fichier Résultat.txt avec le code suivant

Code : Tout sélectionner

ReadFile(1, "Résultat.txt")
Quand au deuxieme code que tu proposes je n'en vois pas l'utilité.

Re: Editeur D'expression

Publié : mer. 15/févr./2017 0:20
par Shadow
Tous les codes sont utile !
Pour faire simple, bien que complexe quand même:

Je créer le fichier source PB "Code Source.pb" qui contient les instructions suivante:

Création du fichier "Résultat.txt"
Écriture du résultat de l’opération de l'éditeur d'expression évalué grâce à StrD()
Fermeture du fichier

Ensuite j'appel le compilateur PB et je lui donne le fichier "Compilation.pb"
qui lui même contiendra par un include le fichier "Code Source.pb"

Le compilateur essaie de compiler le fichier "Code Source.pb", ensuite j'enregistre la sortie
erreur du compilateur dans un fichier Log qui va inscrire si
une erreur est survenue, sinon j'écris "Pas d'érreurs !"

Ensuite je récupère la sortie (Log) en lisant le fichier
et je l'affiche dans une boîte de dialogue.

Si ya pas d'erreur, j'affiche le résultat dans l'éditeur adéquat
sinon j'affiche qu'il à une erreur.

Voilà en gros.

L'avantage avec ça est que toutes commande PB qui peu
renvoyer un numérique est utilisable dans l'expression !

De cette manière je suis très flexible !
Au delà de toutes mes attente en faite et exactement se que je voulais :D

Re: Editeur D'expression

Publié : mer. 15/févr./2017 1:48
par Ar-S
de cette manière je suis très flexible !
Au delà de toutes mes attentes en fait et exactement ce que je voulais
Et c'est bien là le plus important. Pour ma part je passe, je n'en ai pas l'utilité.

Re: Editeur D'expression

Publié : mer. 15/févr./2017 7:19
par Micoute
Et en plus il fonctionne avec PB 5.60 b3, ce qui prouve que ça fonctionne avec l'Unicode.

Re: Editeur D'expression

Publié : mer. 15/févr./2017 7:47
par Shadow
Non Micoute ça ne fonctionne pas comme ça devrais en Unicode !
A cause des accents sur les nom de fichier notamment je pense.
Sinon peut être oui.

Re: Editeur D'expression

Publié : mer. 15/févr./2017 8:06
par Zorro
je n'ai pas testé le code
mais, il faut avouer que la methode (si ça marche) , ben c'est tres malin ! :)

Re: Editeur D'expression

Publié : mer. 15/févr./2017 8:25
par Marc56
Ligne 137:

Code : Tout sélectionner

DeleteFile("PureBasic.exe")"
Si le chemin courant se perd, possibilité de supprimer l'IDE PB :roll:

:arrow: Dans une application sérieuse, les fonctions systèmes doivent toujours s'utiliser avec un chemin complet ou une vérification préalable du répertoire courant. :!:
(Pour les exécutables générés par une application, on utilise en général GetTemporaryDirectory() sinon l'EXE se fait mettre en quarantaine par tout antivirus sérieux)

Code : Tout sélectionner

OnErrorCall(@ErrorHandler())
C'est bien (mais autant le mettre au début) juste après EnableExplicit (absent)
De toutes façons il ne sert à rien car tu as oublié d'écrire la procédure ErrorHandler()...
https://www.purebasic.com/french/docume ... rcall.html


Ton programme fonctionne en mode unicode (testé sous 5.60 B3)
- Replace "Résultat.txt" par "Resultat.txt"
- Supprime la ligne 154 (DeleteFile("Resultat.txt")) ton résultat s'y trouve, tu n'as qu'à afficher le contenu


Trop de boucles If / EndIf rendent ton programme difficile à suivre:

:idea: Il est plus lisible d'écrire dans une procédure directement la sortie si la condition principale n'est pas remplie

Code : Tout sélectionner

If Not ...
     MessageRequester(...
     ProcedureReturn 
EndIf
que

Code : Tout sélectionner

If ...
     If ...
          If ...
               ...
               ...
               ...
          EndIf
     EndIf
Else
     ...
EndIf
Car on a vite fait de se tromper dans les imbrications (et d'oublier par exemple de relâcher un handle de fichier ouvert)

Re: Editeur D'expression

Publié : mer. 15/févr./2017 9:20
par Zorro
voici en gros le principe :) (testé et fonctionne chez moi )

Code : Tout sélectionner


Enumeration
#file
EndEnumeration


expression.s="10*6+(8/2)+Pow(2.0, 3.0) " ; l'expression qui sera evalué par le compilo


; **************************************************************************************
nom_file.s="resultat.pb" ; le nom du prg qui sera compilé
Openfile(#file,nom_file.s)
		WriteStringN(#file,"a.q =" + expression.s) ; on attribut l'expression a une variable .q
		WriteStringN(#file,"SetClipboardText(strq(a.q ))") ; on copie le resultat dans le clipboard
CloseFile(#file)

RunProgram(#PB_Compiler_Home + "\Compilers\pbcompiler.exe", nom_file.s, "") ; on lance notre pseudo prg
delay(500)

debug "le resultat est :"+GetClipboardText() ; on affiche le contenu du clipboard ...bref , le resultat
ClearClipboard()
; **************************************************************************************


bon en fait, ça ne peut servir qu'a ceux qui ont une licence Purebasic
puisqu'il faut détenir le compilateur .... ce qui limite pas mal l'interet au final :)

mais l'idée est interessante :)

Re: Editeur D'expression

Publié : mer. 15/févr./2017 9:29
par Kwai chang caine
Oui, bonne idée d'utiliser le compilateur 8O t'es un malin :mrgreen: , ce dont je n'ai jamais douté :wink:
Bon...ca oblige à avoir une licence, mais fallait y penser ...
Merci du partage 8)

Re: Editeur D'expression

Publié : mer. 15/févr./2017 9:36
par Marc56
Efficace, Zorro (comme d'habitude) :P

En passant, à quoi sert:

Code : Tout sélectionner

Declare appelcompilateur()
La procédure n'est pas dans le code ?

PS. La largeur de ton bandeau de signature (1241 px) élargie tout le forum dès que tu postes un article. Si tu pouvais réduire de 25 ou 50% ce serait bien et tout aussi lisible :wink:

Re: Editeur D'expression

Publié : mer. 15/févr./2017 9:42
par Shadow
Je conçois bien que mon programme soit encore très imparfaits :wink:
Mais je vais amélioré :)

Utiliser le débogueur de PB...

Bha oui, je demande un truc qui n'existe pas, pouvoir évoluer une expression
exactement comme si c’était dans PB lui même pour avoir toutes les possibilités du langage.

Et ça n'existe pas je pense, et bien trop compliquer à mettre en place même pour un pro.
Alors quoi ?

Bon j'me suis dit, écoute, tu as PB là, tu as tous se qui te faut, pourquoi chercher
une chose qui ne te conviendra de toute façon jamais, alors que
tu as le compilateur de PB sous la main ?! -> Sert t'en !

Et voilà, l'idée est venue de là.

Malin ?!, j'avoue que c'est futé et que j'ai pris la meilleur décision possible.
Il faut PB oui et de toute façon c'est indispensable !

Je suis assez fier de mon idée et surtout de l'avoir mis en pratique !
Merci à vous.

Re: Editeur D'expression

Publié : mer. 15/févr./2017 10:00
par Zorro
Marc56 a écrit :En passant, à quoi sert:

Code : Tout sélectionner

Declare appelcompilateur()
La procédure n'est pas dans le code ?
un oubli !
PS. La largeur de ton bandeau de signature (1241 px) élargie tout le forum dès que tu postes un article. Si tu pouvais réduire de 25 ou 50% ce serait bien et tout aussi lisible :wink:
corrigé en principe merci (la largeur max d'une image,sur un forum, ne devrai pas depasser 800 de largeur .. je le sais pourtant
mais.... je suis passé a coté de ça :roll:

Re: Editeur D'expression

Publié : mer. 15/févr./2017 11:35
par JohnJohnsonSHERMAN
C'est une bonne idée de passer par le compilateur :) J'y aurais pas pensé ;)
Ca me rapelle ce que faisait un utiisateur du forum Allemand pour inclure du code PB dans une page web (sur le même principe que le PHP) , la page était lue par le serveur, le code compilé et exécuté, et la sortie du programme était renvoyée dans la page, alors envoyée au client :) J'étais passé dessus en faisant mon serveur, mais pas moyen de remettre la main dessus...


En tout cas, merci Shadow

Re: Editeur D'expression

Publié : mer. 15/févr./2017 11:41
par Kwai chang caine
JohnJohnsonSHERMAN a écrit :la page était lue par le serveur, le code compilé et exécuté, et la sortie du programme était renvoyée dans la page
Put...pour faire un virus à distance, c'est de la balle 8O
C'est vrai que quand on peut trimballer le compilo, on peut faire whatmilles choses etant donné sa portabilité 8)
Je me rappelle aussi un fil de discussion, ou quelqu'un avant demandé si il pouvait le copier dans son programme, je te laisse deviner la réponse :lol: