3 petites questions

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gadjet35
Messages : 190
Inscription : ven. 21/oct./2005 7:49
Localisation : Quelque part en france !

3 petites questions

Message par gadjet35 »

_________________________________________________________

voila je voudrais savoir si il existe une fonction qui transforme un string en fonction
EX:

Code : Tout sélectionner

a$ = "delay(1000)"
<nom de la foction>(a$)
a la deuxieme ligne le programme devrai compter sa comme: delay(1000)

________________________________________________________

j'ai un probleme avec les stringgadget
en fait j'aimerai recuperer du text a une ligne donner

________________________________________________________

j'ai un probleme avec une image :

Code : Tout sélectionner

 CreateImage(image1,50,50)
 StartDrawing(ImageOutput())
  Circle(25,25,25,RGB(250,0,0))
 StopDrawing()

OpenWindow(#window_test,0,0,500,500,#PB_Window_SystemMenu|#PB_Window_WindowCentered,"Dessin")
 CreateGadgetList(WindowID(#window_test))
  ImageGadget(11,250,250,50,50,image1)
___________________________________________________
bonne journer à tous !!!
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

A mon avis non mais l'utilisation me parait douteuse..
Il faudrait faire quelque chose du genre :

Code : Tout sélectionner

 a$ = "delay(1000)"
procedure truc(a$)
if a$ = "delay(1000)"
delay(1000)
endprocedure
mais je ne saisi pas bien l'utilisation que l'on pourrait en faire :?
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
gadjet35
Messages : 190
Inscription : ven. 21/oct./2005 7:49
Localisation : Quelque part en france !

Message par gadjet35 »

en fait j'essaie de programmer un programmme de programmation
et donc mon programme va cherchez ligne apres ligne des fonctions si il n'en trouve pas il passe quand meme a ligne suivante et donc si il en trouve je créer un variable text qui aura comme nom le numero de la ligne qu'il regarde et auras comme contenue une fonction de purebasic pour exuter ma fonction et plus tard quand il auras fini de regarder toutes les ligne je lance une procedure qui sera: <nom de la fonction>(ligne1$),
<nom de la fonction>(ligne2$),<nom de la fonction>(ligne3$)etc...
bonne journer à tous !!!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ben, j'avoue que je n'ai pas compris grand-chose non plus :lol:

Dans ce cas, ton a$ = "delay(1000)" est considéré un string, et pas autre chose.

Tu mettrais a$ = "tartempion", ce serait pareil

T'as de droles d'idées, gadget
gadjet35
Messages : 190
Inscription : ven. 21/oct./2005 7:49
Localisation : Quelque part en france !

Message par gadjet35 »

je peux vous montrer mon code la ou il en est (pas terminer) :

Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Window_1
  #Window_Test
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_3
  #MENU_4
  #MENU_5
  #MENU_6
  #MENU_7
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
  #Button_1
  #Button_2
  #Button_3
  #Button_4
  #Button_5
  #String_1
  #Scrol_0
EndEnumeration


Procedure Open_Window_1()
  If OpenWindow(#Window_1, -4, -4, 1024, 712,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget , "Pure  Move")
    If CreateMenu(#MenuBar_0, WindowID())
      MenuTitle("Fichier")
      MenuItem(#MENU_1, "Ouvrir fichiers")
      MenuItem(#MENU_2, "Sauvegarder fichiers")
      MenuBar()
      MenuItem(#MENU_3, "Fermer pure move")
      MenuTitle("Edition")
      MenuItem(#MENU_4, "Fermer le fichier en cours")
      MenuItem(#MENU_5, "Suprimer un fichier")
      MenuTitle("Aide")
      MenuItem(#MENU_6, "Aide de fonction")
      MenuBar()
      MenuItem(#MENU_7, "Info")
      EndIf

      If CreateGadgetList(WindowID())
        TextGadget(#Text_0, 0, 50, 1020, 20, "___________________________________________________________________________________________________________________________________________________________________________")
        ButtonGadget(#Button_1, 700, 0, 120, 40, "Lancer")
        ButtonGadget(#Button_2, 10, 10, 90, 30, "Ouvir")
        ButtonGadget(#Button_3, 150, 10, 90, 30, "Sauvegarder")
        ButtonGadget(#Button_4, 290, 10, 90, 30, "Fermer le fichier")
        ButtonGadget(#Button_5, 430, 10, 90, 30, "Quitter")
        ScrollAreaGadget(#scrol_0,20,80,980,610,950,2000,10)
         StringGadget(#String_1, 10, 10, 940, 1990, "", #PB_String_MultiLine)
      EndIf
    EndIf
EndProcedure

Procedure lancer_test()
CreateImage(image1,50,50)
 StartDrawing(ImageOutput())
  Circle(25,25,25,RGB(250,0,0))
 StopDrawing()
 ligne = 0
OpenWindow(#window_test,0,0,500,500,#PB_Window_SystemMenu|#PB_Window_WindowCentered,"Dessin")
 CreateGadgetList(WindowID(#window_test))
  ImageGadget(10,0,0,500,500,image0)
  ImageGadget(11,250,250,50,50,image1)
  
 For ligne = 1 To 100
  line$ = StringField(Str(#String_1),ligne,Chr(13))
  Select line$
   Case "boulehaut|"
    haut$ = StringField(line$,2,"|")
    haut = Val(haut$)
    ResizeGadget(11,-1,GadgetY(11)+haut,-1,-1)
   Case "boulebat|"
    bas$ = StringField(line$,2,"|")
    bas = Val(bas$)
    ResizeGadget(11,-1,GadgetY(11)-bas,-1,-1)
  EndSelect
 Next
 
  Repeat : Until WaitWindowEvent()=#PB_EventCloseWindow
EndProcedure

open_window_1()

 Repeat
  Select WaitWindowEvent()
   Case #PB_EventGadget
    Select EventGadgetID()
     Case #button_1
      lancer_test()
     Case #button_2
      fichier$ = OpenFileRequester("Ouvrir...","","fichier pure_move (*.fpm)|*.fpm",0)
      text_fichier$ = ReadString()
      SetGadgetText(#String_1,text_fichier$)
     Case #button_3
      text$ = GetGadgetText(#String_1)
      fichier$ = SaveFileRequester("sauver...","","fichier pure_move (*.fpm)|*.fpm",0)
      CreateFile(0,fichier$+".fpm")
       WriteStringN(text$)
      CloseFile(0)
     Case #button_4
      SetGadgetText(#String_1,"")
     Case #button_5
      End
    EndSelect
   Case #PB_EventMenu
    Select EventMenuID()
     Case #menu_1
      fichier$ = OpenFileRequester("Ouvrir...","","fichier pure_move (*.fpm)|*.fpm",0)
      text_fichier$ = ReadString()
      SetGadgetText(#String_1,text_fichier$)
     Case #menu_2
      text$ = GetGadgetText(#String_1)
      fichier$ = SaveFileRequester("sauver...","","fichier pure_move (*.fpm)|*.fpm",0)
      CreateFile(0,fichier$+".fpm")
       WriteStringN(text$)
      CloseFile(0)
     Case #menu_3
      End
     Case #menu_4
      SetGadgetText(#String_1,"")
     Case #menu_5
      fichier$ = OpenFileRequester("Suprimer...","","fichier pure_move (*.fpm)|*.fpm",0)
      DeleteFile(fichier$)
     Case #menu_6
      IncludeBinary "Aide/AideFonction.htm"
     Case #menu_7
      MessageRequester("INFO","Le Programmeur :"+Chr(13)+"Prenom :   Sven"+Chr(13)+"Nom :   Thommet")
    EndSelect
   Case #PB_EventCloseWindow
    quit = 1
  EndSelect
 Until quit = 1
bonne journer à tous !!!
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

Oula !
ben il faudrait probablement créer des listes chainée pour y mettre tous les numéros de lignes et le texte qui lui correspond et ainsi après créer une procedure qui comparerait le texte qu'il y a écrit sur ta ligne avec toutes les fonctions de purebasic et lorsque ça correspond ben tu execute la fonction....mais ça me semble un peu tordu comme truc :?
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tordu mais faisable !!

regarde ma signature :D

un petit interpreteur "Logo" PureGolo ...
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

Alors dans ce cas tu es le mieux placé pour aider gadjet35 :D
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

Au fait pour passer d'une ligne a l'autre je pense qu'il faut utiliser quelque chose du genre :

Code : Tout sélectionner

If OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"StringGadget Flags") And CreateGadgetList(WindowID(0))

    StringGadget(7,8,205,306,60,"Multiline StringGadget..."+Chr(13)+Chr(10)+"second line...",#PB_String_MultiLine)
    
    Repeat 
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
Debug StringField(GetGadgetText(7), 1, Chr(13))
Debug Right(StringField(GetGadgetText(7), 2, Chr(13)), Len(StringField(GetGadgetText(7), 2, Chr(13))) - 1)
A chaque fois que tu rajoute 1 à lindex du stringfield tu passe à la ligne suivante
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

Pour les images essaie de regarder le code que je t'ai corrigé thèmes 'probleme avec les images...', il y a la correction dedans :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

le plus simple est de recuperer les lignes les une apres les autres
et a chaques ligne , tu la colle dans une liste chainée qui contiendra tout ton code separé par ligne !

element1 = ligne 1
element2 = ligne 2
element3 = ligne 3

en suite pour l'execution tu reprend ta liste chainé element par element
for each --- next


a chaque ligne tiré de ta liste chainé , tu execute une analyse de ta phrase
pour retenir "l'instruction" de ton langage , et ses parametres ..

et en fonction de cette instruction tu execute une action !

voila en gros le principe de base d'un interpreteur ! :D

pourquoi passer par une liste chainé ?

simplement parce que une fois que tes lignes de code sont separées et posées dans une liste chainée , tu peux acceder facilement a chaques elements
donc chaques lignes de ton code

donc lorsque tu as un "Goto 50" qui se presente tu sait qu'il faut acceder au contenu du 50 eme element de ta liste chainée !
et voila comment on fait un goto !!

un gosub , c'est pareil , sauf que tu retient l'element d'ou tu part , pour pouvoir y revenir lorsque tu rencontre l'instruction "return"

voici le contenu d'une pseudo liste chainé appelé:"pile()"

Code : Tout sélectionner

element 1 :  print "bonjour"
element 2 :  for a=32 to 127
element 3 :  print chr$(a)
element 4 :  next a
element 5 :  cls
element 6 :  gata 1

dans ce cas lorsque on arrive a l'instruction "GATA"
on sait que l'on doit effectuer un saut , notre analyse de la phrase nous indique le chiffre "1"

on sautera directement au contenu de la liste chainée 1
avec un

Code : Tout sélectionner

SelectElement(pile(), 1)
maintenant notre position etant l'element 1
on analyse la phrase
et en fonction de ce qu'on trouve on execute l'action
et on increment la position dans la liste chainée pile()

la position dans la liste est comparable au pointeur d'instruction
(PC) de l'assembleur

il faut penser "position" tout au long de ton prg !

car c'est la position dans la liste chainée "pile()" qui determine l'execution
d'une action !

je sais pas si j'ai été assé clair :D

bien sur j'ai utilisé GATA pour te montrer que tu peux donner le nom que tu veux a tes instructions !! :D
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

@Dobro : merci pour cette explication, ca m'a bien aidé pour le p'tit prog que je suis entrain de faire :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ha bah ! si ce que je raconte peut servir a quelqu'un , c'est encore mieux ! :lol:
gadjet35
Messages : 190
Inscription : ven. 21/oct./2005 7:49
Localisation : Quelque part en france !

Message par gadjet35 »

bon ok merci pour toutes ces explications je me lance dedans :D :)
:idea: :idea: :idea: :idea: :idea:
bonne journer à tous !!!
gadjet35
Messages : 190
Inscription : ven. 21/oct./2005 7:49
Localisation : Quelque part en france !

Message par gadjet35 »

j'ai juste encore un probleme :

Code : Tout sélectionner

Procedure lancer_test()
 For ligne = 1 To 100
  text$ = StringField(GetGadgetText(#String_1),ligne,Chr(10))
  Select text$
   Case "ouvrirwindow" ;si j'écrit ouvrirwindow| et des nombres derriers sa ne marchera plus il faut un moyen pour lui dire qu'il le fait quand meme
  
  EndSelect
 Next
 code()
EndProcedure
bonne journer à tous !!!
Répondre