PureBasic

Forums PureBasic
Nous sommes le Sam 14/Déc/2019 5:34

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 41 messages ]  Aller à la page 1, 2, 3  Suivante
Auteur Message
 Sujet du message: Editeur D'expression
MessagePosté: Mar 14/Fév/2017 22:25 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
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:
47 * (48 + 98 / (24 /5)) + 99 * (99 + CountString("abcdefABCDEF", "a") - 24) * Round(987, #PB_Round_Down) / (45 * 76)


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

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Dernière édition par Shadow le Mer 15/Fév/2017 7:56, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mar 14/Fév/2017 23:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6864
Localisation: IDF (Yvelines)
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:
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:
ReadFile(1, "Résultat.txt")

Quand au deuxieme code que tu proposes je n'en vois pas l'utilité.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 0:20 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
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

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 1:48 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8785
Citation:
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é.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 7:19 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2213
Localisation: 50200 Coutances
Et en plus il fonctionne avec PB 5.60 b3, ce qui prouve que ça fonctionne avec l'Unicode.

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 7:47 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
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.

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 8:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2113
je n'ai pas testé le code
mais, il faut avouer que la methode (si ça marche) , ben c'est tres malin ! :)

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 8:25 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1641
Ligne 137:
Code:
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:
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/documentation/onerror/onerrorcall.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:
If Not ...
     MessageRequester(...
     ProcedureReturn
EndIf

que
Code:
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)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 9:20 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2113
voici en gros le principe :) (testé et fonctionne chez moi )

Code:

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 :)

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Dernière édition par Zorro le Mer 15/Fév/2017 9:59, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 9:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6661
Localisation: Isere
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)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 9:36 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1641
Efficace, Zorro (comme d'habitude) :P

En passant, à quoi sert:
Code:
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:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0), Raspberry Pi


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 9:42 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
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.

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 10:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2113
Marc56 a écrit:
En passant, à quoi sert:
Code:
Declare appelcompilateur()
La procédure n'est pas dans le code ?

un oubli !

Citation:
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:

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 11:35 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 13/Déc/2015 11:05
Messages: 649
Localisation: Allez, cherche...
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

_________________
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Editeur D'expression
MessagePosté: Mer 15/Fév/2017 11:41 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6661
Localisation: Isere
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:

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 41 messages ]  Aller à la page 1, 2, 3  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye