Page 1 sur 1

Mettre à jour les textes d'un Gadget

Publié : mer. 01/août/2007 21:49
par Octavius
Sans le détruire et le recréer, comment fait-on pour changer les textes d'un Gadget, genre un Menu ?

Exemple :

Code : Tout sélectionner

; les chaînes de texte
title$="Titre"
item1$="Premier"
item2$="Deuxième"

; voici un menu
CreateMenu(#menu,winID)
MenuTitle(#title,title$)
MenuItem(#item1,item1$)
MenuItem(#item2,item2$)

; maintenant mes chaînes changent
title$="Titre alternatif"
item1$="Prime"
item2$="Bis"
J'aimerai que lorsque les valeurs de mes chaînes changent les textes affichés de la gadget de ma fenêtre changent aussi.

Re: Mettre à jour les textes d'un Gadget

Publié : mer. 01/août/2007 22:09
par Ollivier

Code : Tout sélectionner

; les chaînes de texte
title$="Titre"
item1$="Premier"
item2$="Deuxième"

; voici un menu
FreeMenu(#menu)
CreateMenu(#menu,winID)
MenuTitle(#title,title$)
MenuItem(#item1,item1$)
MenuItem(#item2,item2$)

; maintenant mes chaînes changent
title$="Titre alternatif"
item1$="Prime"
item2$="Bis"

FreeMenu(#menu)
CreateMenu(#menu,winID)
MenuTitle(#title,title$)
MenuItem(#item1,item1$)
MenuItem(#item2,item2$)
J'aimerai que lorsque les valeurs de mes chaînes changent les textes affichés de la gadget de ma fenêtre changent aussi.[/quote]

Publié : mer. 01/août/2007 22:13
par Octavius
Mais avec FreeMenu() je détruit le menu et ensuite je le recrée. Ce n'est pas possible de faire autrement ?

Publié : mer. 01/août/2007 22:52
par venom
bonsoir,

moi j'ai celle-ci comme façon si c'est mieu :? .

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- MenuBar Constants
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_3
  #MENU_4
  #MENU_5
  #MENU_6
  #MENU_7
  #MENU_8
EndEnumeration

;- Gadget Constants
Enumeration
  #Button_10
EndEnumeration

;- Gadget Constants1
Enumeration
  #String_0
  #String_1
  #String_2
  #String_3
  #String_4
  #String_5
  #Butto_11
EndEnumeration

; la sa sera le nom de base des menus si le dossiers menu.men n'est pas present au demarrage
nouveau$ = "nouveau"
ouvrir$ = "ouvrir"
quitter$ = "quitter"
couper$ = "couper"
copier$ = "copier"
coller$ = "coller"

; la on tente d'ouvrir le dossier appeler  menu.men. si il n'existe pas on passe a la suite
OpenPreferences("c:/menu.men")
nouveau$ = ReadPreferenceString("nouveau", nouveau$)
ouvrir$ = ReadPreferenceString("ouvrir", ouvrir$)
quitter$ = ReadPreferenceString("quitter", quitter$)
couper$ = ReadPreferenceString("couper", couper$)
copier$ = ReadPreferenceString("copier", copier$)
coller$ = ReadPreferenceString("coller", coller$)



; la on cree une procedure open_1(). qui ouvrira la fenetre 2 plus tard on ne s'attarde aps sur le sujet on passe a la ligne 101
Procedure open_1()
If OpenWindow(#Window_1, 366, 232, 250, 140, "options",   #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    If CreateGadgetList(WindowID(#Window_1))
      Resultat = StringGadget(#String_0, 10, 10, 100, 20, "nouveau")
      Resultat1 = StringGadget(#String_1, 10, 40, 100, 20, "ouvrir")
      Resultat2 = StringGadget(#String_2, 10, 70, 100, 20, "quitter")
      Resultat3 = StringGadget(#String_3, 140, 10, 100, 20, "couper")
      Resultat4 = StringGadget(#String_4, 140, 40, 100, 20, "copier")
      Resultat5 = StringGadget(#String_5, 140, 70, 100, 20, "coller")
      ButtonGadget(#Butto_11, 80, 110, 90, 20, "modifier")
     
    EndIf
  EndIf

  Repeat
   EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
     
        Case #Butto_11
; donc la on renvoie le texte precedament taper dans le fichier qu'on va cree juste apres
         Texte$ = GetGadgetText(#String_0)
         Texte1$ = GetGadgetText(#String_1)
         Texte2$ = GetGadgetText(#String_2)
         Texte3$ = GetGadgetText(#String_3)
         Texte4$ = GetGadgetText(#String_4)
         Texte5$ = GetGadgetText(#String_5)

;voila la on cree le fichier menu.men a la racine du disque dur
         CreatePreferences("c:/menu.men")
; et la on reporte dans le fichier les textes taper dans les string ( les nouveau nom de menu )
          WritePreferenceString("nouveau", Texte$)
          WritePreferenceString("ouvrir", Texte1$)
          WritePreferenceString("quitter", Texte2$)
          WritePreferenceString("couper", Texte3$)
          WritePreferenceString("copier", Texte4$)
          WritePreferenceString("coller", Texte5$)
         ClosePreferences()
         MessageRequester("information", "attention pour appliquer les changement le programme doit fermer", 0)
          End
     
      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow
EndProcedure

; la le code commance vraiment on ouvre la fenetre principale avec les fameux menu
  If OpenWindow(#Window_0, 0, 0, 600, 300, "menu rename",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
  ; on cree les menus
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuTitle("fichier")
      MenuItem(#MENU_3, nouveau$)
      MenuItem(#MENU_4, ouvrir$)
      MenuItem(#MENU_5, quitter$)
      MenuTitle("edition")
      MenuItem(#MENU_6, couper$)
      MenuItem(#MENU_7, copier$)
      MenuItem(#MENU_8, coller$)
      EndIf
ClosePreferences()

      If CreateGadgetList(WindowID(#Window_0))
        ButtonGadget(#Button_10, 10, 10, 110, 20, "renommer les menus")
       
      EndIf
    EndIf

; la on cree les evenements du boutton   renommer les menus
  Repeat
   EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
     
       Case #Button_10
; et la on appel la fenetre no2 le fameux open_1() pour le reste faut remontee a la ligne 75
        open_1()
       
      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow
  
; voila apres on ferme la fenetre et c'est rebelotte au prochain demarrage ;)
; j'espert que sa va un peut t'aider
voila



@++

Publié : jeu. 02/août/2007 0:01
par Octavius
Je comprends pas trop le principe de ta manip'...

Publié : jeu. 02/août/2007 0:04
par venom
bin je ne sais pas :? :) .

ton but sa n'est pas de renomer tes menu ?


@++

Publié : jeu. 02/août/2007 0:51
par Octavius
Si, mais je n'arrive pas trop à déchiffrer ce qui se passe, tu as deux boucles principales ? :? Je ne comprends pas comment ça marche... A quoi servent les StringGadget ?

Publié : jeu. 02/août/2007 1:42
par venom
et bien en faite tu a une 1ere fenetre qui a un menu jusque la tout va bien:

http://purebasic.myftp.org/files/226/menu.bmp

ensuite quand tu clic sur le boutton renommer les menus. tu arrive dans une nouvelle fenetre :wink: et c'est du a sa que tu a boucles principales.

et dans cette derniere tu a des string qui correspond a tes menu et quand le programme se ferme sa cree un fichier a la racide de c:/.

qui fait que a chaque ouverture les menu lisent ce dossier et sont automatiquement renomer.

oui je sais c'est du charabia :wink: .

je commante mon code pour demin.

voila c'est fait regarde mon 1er poste le code a changer :wink:


@++

Publié : jeu. 02/août/2007 2:15
par Octavius
Ah OK, j'ai compris! :)

Publié : jeu. 02/août/2007 3:14
par venom
tan mieu si tu a compris pour toute queston n'esite pas :wink: .


@++

Re: Mettre à jour les textes d'un Gadget

Publié : ven. 03/août/2007 19:51
par nn a512
Octavius a écrit :J'aimerai que lorsque les valeurs de mes chaînes changent les textes affichés de la gadget de ma fenêtre changent aussi.
SetMenuItemText() et SetMenuTitleText().

Re: Mettre à jour les textes d'un Gadget

Publié : sam. 04/août/2007 18:16
par Ar-S
nn a512 a écrit :
Octavius a écrit :J'aimerai que lorsque les valeurs de mes chaînes changent les textes affichés de la gadget de ma fenêtre changent aussi.
SetMenuItemText() et SetMenuTitleText().
Vi bien plus simple non ?