Je me suis mis récemment au PureBasic et j'apprends petit à petit.
Aujourd'hui j'ai débuté un programme mais j'ai besoin d'une aide par rapport à la fonction StringGadget.
Elle est en mode numeric et je cherche comment savoir si le champ est vide ? (mais la valeur rentrée peut être 0)
J'ai cherché sur le forum mais je n'ai pas trouvé. Par contre cette recherche m'a permis de savoir comment centrer le texte !
le string gadget renvoie une chaine donc si c'est vide ca renvois une chaine vide "" en mode numérique ou pas.
pour utiliser la valeur entrée au clavier il est nécessaire de transformer la chaine en nombre avec la fonction 'val()'
;- Window Constants
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
Enumeration
#String_0
#Button_0
EndEnumeration
If OpenWindow(#Window_0, 220, 0, 190, 70, "", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
StringGadget(#String_0, 10, 10, 170, 20, "")
ButtonGadget(#Button_0, 10, 40, 170, 20, "test si le string est vide")
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #Button_0 ;<---- ont fait un appuie sur le bouton et ont passe a la suite.
If GetGadgetText(#String_0) = "" ;<---- test si le string est vide grace au "" si il est vide il passa a la ligne suivante tu pe y mettre ce que tu veut. Si il n'est pas vide, il saute a la ligne Elseif
MessageRequester("Info", "le string est vide", 0)
ElseIf GetGadgetText(#String_0) ;<---- si il n'est pas vide le code arrive directement ici et lance ce que tu a mis dessous jusqu'a endif. Là c'est un messagerequester. ;)
MessageRequester("Info", "le string n'est pas vide", 0)
EndIf
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
titraxx a écrit :Oui mais si la valeur dans le StringGadget est 0 ce n'est pas vide mais c'est équivalent au "" non ?
non
0 c'est "0" vide c'est ""
le stringgadget ne revoie pas un nombre mais une chaine de caractères en mode numérique il permet seulement la saisie de nombres . mais renvoi toujours une chaine
entree=Val(GetGadgetText(#String_0))
If entree <> Val("")
...
C'était assez bête comme problème ! Mais à force de rester devant l'ordi à coder je n'ai plus l'esprit clair
C'est agréable d'avoir des gens qui aident et des réponses si rapidement !
Quand j'aurais fini mon programme je le posterai afin d'avoir vos avis
Bonne soirée et à bientôt ! (oui, je reviendrais ! )
Salut,
Pour être précis, et pour les (tout) nouveaux.
ton gadget #string_0 va avoir un identifiant, un numéro qui va lui être attribué.
Le contenu de ton gadget "entree" peut être décrit comme une valeur numéraire (rique?) ou comme une chaine de caractères.
Si tu écris :
entree$ = ... ici on attend une chaine de caractère, que ce soit "toto" ou "1234" ou même "t1o2t3o" entree.s = même chose (le .s pour "string" tiens !)
entree = ... attendra un chiffre (sans guillemets !), il faut donc que les chaines entrées soient des chiffres. Tu peux très bien forcer la chose en ajoutant #PB_String_Numeric en option à la création de ton string gadget. entree.b ou .i .l etc.. sont fait pour ça aussi, je te laisse regarder l'aide pour les différentes utilités.
Le tout est de bien comprendre que tu peux faire entree.s = "5+5"
et entree = 5+5
te donneront les résultats : "5+5" pour entree.s 10 pour entree
Dans tous les cas, tu vides le contenu en ecrivant entree.s=""
ou
entree=""