Lecture de datas depuis une procedure

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Lecture de datas depuis une procedure

Message 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 :)
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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
Pierre
Messages : 244
Inscription : ven. 23/janv./2004 20:29
Localisation : 77 (Région parisienne)

Message 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!
Image
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :)
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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)) 
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Super!! Merci Comtois :)

Chris :)
brossden
Messages : 818
Inscription : lun. 26/janv./2004 14:37

Message 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :)
brossden
Messages : 818
Inscription : lun. 26/janv./2004 14:37

Message 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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

...
Dernière modification par Dr. Dri le lun. 10/oct./2005 8:28, modifié 1 fois.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Nous sommes au moins 2 à avoir le même prénom sur ce forum :D
brossden
Messages : 818
Inscription : lun. 26/janv./2004 14:37

Message 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 !!
Répondre