Page 1 sur 1

Lecture de datas depuis une procedure

Publié : sam. 14/févr./2004 17:02
par Chris
Salut :)

J'ai une procedure qui doit commander la lecture de datas selon la langue désirée.

J'ai bricolé ça d'après le support des langues de Visual Designer.

Le problème, c'est que ça ne fonctionne pas. Je vous met le code, ce sera plus simple. :lol:

Code : Tout sélectionner

Procedure SetLanguage(Flag.b)
  Select Flag
    Case 1 
      Restore FrenchLanguage
      For k=0 To 19
        Read Language$(k)
      Next
    Case 2
      Restore EnglishLanguage
      For k=0 To 19
        Read Language$(k)
      Next
  EndSelect
EndProcedure

DataSection
FrenchLanguage:
  Data$ "Options"             ;0
  Data$ "Changer le chemin"   ;1
  Data$ "Langue"              ;2
  Data$ "Quitter"             ;3
  Data$ "Aide"                ;4    
  Data$ "Aide"                ;5
  Data$ "Sites Web"           ;6  
  Data$ "CGSoftares"          ;7
  Data$ "jaPBe"               ;8
  Data$ "Pure Basic"          ;9
  Data$ "A Propos"            ;10
  Data$ "Titre"               ;11
  Data$ "Infos"               ;12
  Data$ "Fonction"            ;13
  Data$ "Description"         ;14
  Data$ "Paramètres"          ;15
  Data$ "Quitter"             ;16
  Data$ "Copier"              ;17
  Data$ "Français"            ;18
  Data$ "English"             ;19
  
EnglishLanguage:
  Data$ "Options"             ;0
  Data$ "Change Path"         ;1
  Data$ "Language"            ;2
  Data$ "Quit"                ;3
  Data$ "Help"                ;4    
  Data$ "Help"                ;5
  Data$ "Wep Site"            ;6  
  Data$ "CGSoftares"          ;7
  Data$ "jaPBe"               ;8
  Data$ "Pure Basic"          ;9
  Data$ "About"               ;10
  Data$ "Title"               ;11
  Data$ "Infos"               ;12
  Data$ "Function"            ;13
  Data$ "Description"         ;14
  Data$ "Parameters"          ;15
  Data$ "Quit"                ;16
  Data$ "Copy"                ;17
  Data$ "Français"            ;18
  Data$ "English"             ;19
EndDataSection
Ces datas, sont les noms des commandes contenues dans les menus et les bouton du prog que je suis en train de faire.

Si j'utilise la commande comme ça:

Code : Tout sélectionner

Restore FrenchLanguage
For k=0 To 19
Read Language$(k)
Next
pas de problème, ça fonctionne. Pareil avec l'anglais.

Mais dès que je mets ça dans une procédure, je n'ai plus rien qui s'affiche dans les boutons ou les menus.

Est-ce qu'il y a un truc spécial à savoir pour lire les datas depuis une procédure??

Chris :)

PS: Si vous trouvez des fautes dans la traduction, vous pouvez me le dire, je ne serais pas vexé :lol:

Chris :)

Publié : sam. 14/févr./2004 17:21
par comtois
je ne vois pas de quoi tu parles , puisque le tableau se remplit bien .
mets un code qui ne fonctionne pas :) on pourra peut-être voir ce qu'il se passe .

Code : Tout sélectionner

Dim Language$(25)

Procedure SetLanguage(Flag.b) 
   Select Flag 
      Case 1 
         Restore FrenchLanguage 
         For k=0 To 19 
            Read Language$(k) 
         Next 
      Case 2 
         Restore EnglishLanguage 
         For k=0 To 19 
            Read Language$(k) 
         Next 
   EndSelect 
EndProcedure 
SetLanguage(2)
For k = 0 To 19
   Debug Language$(k)
Next k

Publié : sam. 14/févr./2004 17:23
par Pierre
je sais pas mais ta procedure, sans un procedurereturn, elle retourne aucune valeur
mais j'ai peut-être tout faux ou le problème viens p'têt pas de la!

Publié : sam. 14/févr./2004 18:04
par Chris
Bon, ben voilà un code qui ne fonctionne pas...

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Win_0
EndEnumeration

;- Gadget Constants
Enumeration
  #Btn_0
EndEnumeration

Dim Language$(0)

;*******************************************************
;- Commenter cette partie, et plus rien ne s'affiche dans le bouton
Restore BaseLanguage  ;- Normalement, elle ne devrait pas être ici,
For k=0 To 0          ;- puisqu'elle est dans la procedure.
  Read Language$(k)   ;-
Next                  ;-
;-

;*******************************************************
Procedure SetLanguage(Flag.b)
  Select Flag
    Case 1
      Restore BaseLanguage
      For k=0 To 0
        Read Language$(k)
      Next
    Case 2
      Restore EnglishLanguage
      For k=0 To 0
        Read Language$(k)
      Next
  EndSelect
EndProcedure

Procedure Open_Win_0()
  If OpenWindow(#Win_0, 216, 0, 135, 85,  #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar , "New window ( 0 )")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Btn_0, 25, 30, 90, 30, Language$(0))
    EndIf
  EndIf
EndProcedure

Open_Win_0()
Value = 1

;********************************************************
;- Normalement, dans cet exemple, quand on clique sur le bouton, la langue change     
;******************************************************** 
Repeat
  Event = WaitWindowEvent()
  If Event = #PB_EventGadget
    GadgetID = EventGadgetID()
    If GadgetID = #Btn_0
      If Value = 1 : Value = 2 : Else : Value = 1 : EndIf
      ;Debug Value
      SetLanguage(Value)
    EndIf
  EndIf
Until Event = #PB_EventCloseWindow
End

DataSection
BaseLanguage:
  Data$ "Quitter"
  
EnglishLanguage:
  Data$ "Exit"
EndDataSection
Je ne vois pas vraiment ce que la procédure peut me retourner, dans ce cas, ou alors, il y à quelque chose qui me crève les yeux, mais que je ne vois pas. :x

Chris :)

Publié : sam. 14/févr./2004 18:33
par comtois
ce ne sont pas les datas ni la procédure qui sont en cause ,c'est juste que tu ne rafraichis pas ton bouton

si tu places
ButtonGadget(#Btn_0, 25, 30, 90, 30, Language$(0))
après l'appel de la procédure ça fonctionne

Code : Tout sélectionner

    If GadgetID = #Btn_0 
         If Value = 1 : Value = 2 : Else : Value = 1 : EndIf 
        ; Debug Value 
         SetLanguage(Value) 
         ButtonGadget(#Btn_0, 25, 30, 90, 30, Language$(0)) 
        
      EndIf 

Publié : sam. 14/févr./2004 18:44
par comtois
Et plutôt que de mettre

Code : Tout sélectionner

ButtonGadget(#Btn_0, 25, 30, 90, 30, Language$(0)) 
tu peux mettre

Code : Tout sélectionner

SetGadgetText(#Btn_0, Language$(0)) 

Publié : sam. 14/févr./2004 18:50
par Chris
Super!! Merci Comtois :)

Chris :)

Publié : sam. 14/févr./2004 19:27
par brossden
Bonjour

Si tu dimensionnes ton tableau à un élement au moins par Dim language$(1) au lieu de (0), tout fonctionne trés bien dans ton programme. Mais ce que tu oublies c'est de régénérer ta fenêtre, elle a été créée avec la première valeur de language$(0) et si tu n'appelles pas à nouveau la procedure d'affichage de la fenêtre comment veux tu que le texte du bouton soit changer !
Alors si tu mets
Open_Win_0() bien placer tout ce passe comme tu le veux !

Code : Tout sélectionner

Repeat 
  Event = WaitWindowEvent() 
  If Event = #PB_EventGadget 
    GadgetID = EventGadgetID() 
    If GadgetID = #Btn_0 
      If Value = 1 : Value = 2 : Else : Value = 1 : EndIf 
      Debug Value 
      SetLanguage(Value) 
    EndIf 
;<<<<<<<<<<<<<<<<<<<<<<<<<<
 Open_Win_0()
;<<<<<<<<<<<<<<<<<<<<<<<<<<
    EndIf 

Until Event = #PB_EventCloseWindow 
End 

DataSection 
BaseLanguage: 
  Data$ "Quitter" 
  
EnglishLanguage: 
  Data$ "Exit" 
EndDataSection 
Dans le cas présent tu peux te limiter à régénérer le bouton par :
ButtonGadget(#Btn_0, 25, 30, 90, 30, Language$(0))
ou encore :
SetGadgetText(#Btn,Language$(0))
Bonne continuation !!

Denis

Publié : sam. 14/févr./2004 20:54
par Chris
Si tu dimensionnes ton tableau à un élement au moins par Dim language$(1)
C'est pas là qu'est le problème, puisque quand tu dimensionne un tableau à 1, tu as en fait 2 éléments, 0 et 1, normalement.

Et ce code n'est qu'un exemple que j'ai fait pour montrer ce qui ne fonctionnait pas ;). C'est pour ça qu'il n'y a qu'un bouton :idea:

Dans le prog que je suis en train de faire, il y a plus d'éléments que ça, et ça ne fonctionnait pas quand même.

Par contre, c'est vrai que je suis complètement passé à côté du rafraichissement de la fenêtre. Pourtant, je devrais le savoir!!! :oops: :lol:

C'est le problème, quand tu as le nez sur un truc depuis un moment, tu finis par ne plus voir les défauts, et plus tu cherches, et moins tu trouves.

En tout cas, merci pour les réponses ;)

Chris :)

Publié : dim. 15/févr./2004 8:16
par brossden
Bonjour à tous

Exact, la déclaration de zéro élément en donne un ce n'est pas trop logique, mais il faut savoir que cela marche !

Merci Chris et bonne fin de WE.

Denis

Publié : dim. 15/févr./2004 10:47
par Dr. Dri
...

Publié : dim. 15/févr./2004 12:56
par Anonyme2
Nous sommes au moins 2 à avoir le même prénom sur ce forum :D

Publié : dim. 15/févr./2004 16:26
par brossden
Bonjour Denis

Ben oui nous sommes au moins deux à nous prénomer de la sorte, tu remarqueras que je ne t'ai pas volé ton pseudo, mais je suis bien obligé de signé Denis !!
Rires

A+

DENIS !!