Gambas France BETA


Pas de compte ? Incription

Comment insérer une variable texte dans une textbox ?

Ce sujet est résolu.

12
AuteurMessages
Gamux#16 Posté le 23/5/2012 à 18:15:59
Bonsoir Sicard,

avant de lire un flux continu je pense qu'il vaudrait mieux, pour commencer, lire une donnée unique transmise par la balance. Non ? Si cela fonctionne alors tu pourras essayer d'adapter le code pour une lecture en continu.

Je ne sais pas si le code ci-dessous fonctionne car je n'ai pas de balance, mais je pense que l'esprit est là. Teste le et fais nous ton rapport :)

Public Sub Form_Open()
Init_sport()
End

Public Sub Button2_Click()
Try Sport.Close()
Quit
End

Public Sub Init_sport()
If Sport.Status = Net.Active Then Close Sport
Sport.PortName = "/dev/ttyS0"
Sport.Speed = "9600"
Sport.Parity = 0
Sport.DataBits = 8
Sport.StopBits = 1
Sport.FlowControl = 0
Sport.Open()
End

Public Sub Button1_Click()
Poids()
Wait 0.05
SPort_Read()
End

Public Sub SPort_Read()
Dim Poids As String
Poids = Read #SPort, Lof(Sport)
Try TextBox1.Text = Poids
End

Public Sub Poids()
Print #Sport, "P"; Chr$(13); Chr$(10)
End
siscard06#17 Posté le 24/5/2012 à 15:20:10
Bonjour Gamux

"Je ne sais pas si le code ci-dessous fonctionne"
Désolé, ton code ne fonctionne pas.

Bon le problème n'est pas là et tu as mal lu mon dernier post puisque j'ai maintenant quelque chose qui s'affiche dans la Textbox et qui provient bien de la balance, mais il me manque les 14 premiers caractères, ceux dont j'ai besoin.
Or, dans le modèle ils y sont bien, mais c'est un TexArea lequel s'allonge à chaque nouvelle valeur.
Est-ce qu'il ne faudrait pas utiliser ReadLine ou quelque chose comme ça ?

Si quelqu'un à une idée, je suis preneur, merci

Avant de se lancer dans la traversée du désert, faut d'abord apprendre à marcher, non ?
Si tu veux rendre un homme heureux un jour, donnes lui à manger
Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher
siscard06#18 Posté le 25/5/2012 à 17:40:08
Bonjour,

C'est pas encore résolu, mais on avance. :scratch:

Si je remplace ma textbox par une Textarea en lui indiquant TextArea1.Text = TextArea1.Text & Poids, j'obtiens bien l'affichage complet des valeurs reçues au fur et à mesure que je modifie les objets sur la balance, COMME SUR LE MODELE; mais ça s'accumule, et je voudrai avoir seulement la dernière ligne. et si je mets TextArea1.Text = Poids, j'ai plus rien que ce N(et), la balance étant toujours réglée avec une tare.

Si je remplace la Textarea ci-dessus par un TextLabel avec la valeur : TextLabe1 = "Poids = " & Poids: résultat pareil que pour Textbox mais j'ai eu le temps d'apercevoir ma variable Poids complète : 1.234 kg N, le temps d'un flash, mais il ne me reste que Poids = N... Donc ma donnée attendue arrive.

Si je paramètre la balance pour un envoi continu, j'ai un affichage scintillant très désagréable même si j'augmente la vitesse à 19200 bds.

Il faut donc trouver le moyen de stabiliser la valeur de la variable Poids jusqu'à l'arrivée d'une nouvelle valeur (+- grande)

Quelqu'un pourrait-il me donner une idée en ce début de long WE ?
:sunny:
Si tu veux rendre un homme heureux un jour, donnes lui à manger
Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher
gambix#19 Posté le 26/5/2012 à 00:06:40
Faire simple !tu stock la valeur dans une variable ... pardi...


1
2
3
4
5
6
7
8
9
10
PRIVATE $sMavar AS STRING

PUBLIC SUB SPort_Read()
DIM sPoids AS STRING
sPoids = READ #SPort, Lof(Sport)
IF $sMavar <> sPoids THEN
$sMaVar = sPoids
TextBox1.Text = Format($sMavar, "# ### KG")
ENDIF
END
Moins de texte dans une signature c'est agrandir son espace.
gambix#20 Posté le 26/5/2012 à 00:10:04
Faire simple !
1
2
3
4
5
6
7
8
9
10
PRIVATE $sMavar AS STRING

PUBLIC SUB SPort_Read()
DIM sPoids AS STRING
sPoids = READ #SPort, Lof(Sport)
IF $sMavar <> sPoids AND IF InStr(sPoids, "kg") THEN
$sMaVar = sPoids
TextBox1.Text = Format($sMavar, "# ### KG")
ENDIF
END


la je teste aussi la présence de kg
Moins de texte dans une signature c'est agrandir son espace.
siscard06#21 Posté le 27/5/2012 à 17:28:52
Merci Gambix,

Je pensai moi aussi à une astuce de ce genre, mais je ne savais pas trop comment m'y prendre.

Bon j'essaie rigoureusement ta méthode, mais je tombe sur un hic :

ENDIF Without IF dans Fmain class 18; et s'arrête

Si j'efface la ligne 18, le programme s'éxécute, mais se bloque après l'affichage de la première valeur.
Pour l'arrêter, il faut le forcer à quitter.

Alors je ne comprends plus du tout !
Le code :

' Gambas class file

Public Poids As String
Public Mavar As String

Public Sub Button2_Click()

SPort.Open()
TextBox1.Text = " Salut ! " 'c'est pas indispensable , mais c'est +sympa

End

Public Sub SPort_Read()

Poids = Read #SPort, Lof(SPort)
If Mavar <> Poids Then MaVar = Poids
TextBox1.Text = Format(MaVar, "0.000 kg")
Endif
End

Public Sub Button1_Click()

TextBox1.Text = " Bye ... " 'c'est pas indispensable , mais c'est +sympa
Wait 1
SPort.Close()
FMain.Close()

End


:pale:
Détail aussi qui me chagrine, la valeur affichée est arrondie à la dizaine de grammes inférieure : 0.470 kg au lieu de 0.478 kg

:confused:

En ce WE prolongé, j'espère que vous profitez tous bien de la campagne
Moi qui y vit toute l'année, je n'ai pas besoin d'y aller.
Si tu veux rendre un homme heureux un jour, donnes lui à manger
Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher
gambix#22 Posté le 27/5/2012 à 22:44:00
Faire simple !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
' Gambas class file

PUBLIC Poids AS STRING
PUBLIC Mavar AS STRING

PUBLIC SUB Button2_Click()

SPort.Open()
TextBox1.Text = " Salut ! " 'c'est pas indispensable , mais c'est +sympa

END

PUBLIC SUB SPort_Read()

Poids = READ #SPort, Lof(SPort)
IF Mavar <> Poids THEN
MaVar = Poids
'si je me souviens bien la valeur renvoyé contiens des caractères d'ou
TextBox1.Text = Format(Left(MaVar,5), "0.000 kg")
ENDIF
END

PUBLIC SUB Button1_Click()

TextBox1.Text = " Bye ... " 'c'est pas indispensable , mais c'est +sympa
WAIT 1
SPort.Close()
FMain.Close()

END



si la longueur de la valeur change (parfois diférente de 5 car), tu doit parser la valeur
genre:

1
Split(mavar, " ")[0]


ou

1
Scan(mavar, "* *")[0]
Moins de texte dans une signature c'est agrandir son espace.
gambix#23 Posté le 27/5/2012 à 22:45:01
Faire simple !Ha et j'habite en campagne aussi, mieux ... je suis la campagne
Moins de texte dans une signature c'est agrandir son espace.
siscard06#24 Posté le 28/5/2012 à 14:35:39
Super, sauf que la mienne est en train de devenir une ville ! Beuerk !,
mais on lutte pour que le projet de PLU soit revu à la baisse côté béton (http://lesperdigones.over-blog.com/).

Revenons à nos moutons. ou plutôt notre balance (qui d'ailleurs pourrait être n'importe quoi d'autre, Un GPS, une station météo...)
- OK, j'avais déja essayé, je commence à comprendre les manipulations sur les chaines de caractères, mais c'est pas bon.
- Si je remplace la TextBox par une TextArea, tout va bien si j'ajoute le contenu au TextArea précédent, comme dans l'exemple.
si j'enlève le texte précédent, la ça ne marche plus
- Si je mets un LabelBox au lieu d'un TextBox, c'est pareil.

La notice de l'appareil dit : format de sortie = 9 caractères pour le poids dont polarité 1 (- si négatif en cas de pesée avec tare), poids 7, point décimal flottant 1; puis espace 1, unité (kg, gr, lb ou oz)3, stabilité 1, légende (Gross, Net, Tare) 1, CR (CHR$(13), LF (CHR$10). Le poids est envoyé aligné à droite sans zéro. On a une marque de fin de fichier par CR LF, mais pas de repère pour le début.

La chaine peut donc faire au maximum 17 caractères, mais elle peut être moins longue; il faudrait donc plutôt partir de la droite pour extraire la valeur à afficher et peut être aussi la transformer en valeur numérique (pour calculer le prix à payer par le client par exemple), auquel cas on pourrait l'afficher dans un ValueBox, mais c'est pour l'étape suivante. Pour le moment, je voudrai juste afficher ce qui arrive de ce p... de SerialPort !

Y a un autre blème, c'est le endif, si je le mets pas, il plante à l'éxécution, si je le mets, il en veut pas et le débogage s'arrête la-dessus. Etonnant, non ?

Avec Gambas, c'est facile, qu'il disait...
Mais je suis têtu, on va y arriver
Donc si quelqu'un veut bien apporter encore un peu de lumière...
Merci
Si tu veux rendre un homme heureux un jour, donnes lui à manger
Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher
siscard06#25 Posté le 28/5/2012 à 18:26:51
Lorsque j'écris : Poids = Read #SPort, Lof(SPort), ma variable Poids prend la valeur de Read #.... et la garde jusqu'à ce que Read # lui en donne une autre, non ?

Mais est-ce que SPort ne devient pas nul en attendant de recevoir une nouvelle valeur ?
Et c'est bien ce qui se passe lorsque je paramètre un envoi en continu, mais le rythme des envois n'est pas assez rapide pour avoir un affichage qui semble fixe.

Si je rajoute un wait 1 après TextBox1.Text = Poids, ça y est j'ai un affichage presque correct :cheers: ,mais il se fait en 2 temps d'abord la moitié puis l'autre moitié par dessus comme si j'avais d'abord Text puis Box sans avoir jamais le mot TextBox en entier :scratch:
reste plus qu'à trouver comment transformer la chaine pour que ce soit comme je veux.

Bon, demain je vais au marché, mais je n'ai pas encore besoin de la balance.
Si tu veux rendre un homme heureux un jour, donnes lui à manger
Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher
gambix#26 Posté le 28/5/2012 à 22:46:46
Faire simple !pour ton endifabout:home c'est que tu doit mettre un retour a la ligne après le then !!!

la structure

if cond then
work
else
work2
endif

ou

if cond then work

dans mon cas il y a deux action donc je doit utiliser la première forme

if cond then
work1
work2
endif
Moins de texte dans une signature c'est agrandir son espace.
gambix#27 Posté le 28/5/2012 à 22:47:17
Faire simple !gambas est simple ... ton problème serait le même avec tout les langages
Moins de texte dans une signature c'est agrandir son espace.
siscard06#28 Posté le 29/5/2012 à 05:52:16
Avec Gambas, c'est facile, qu'il disait...
It was only a joke sur le ton si c'est ça la vie de chateau...
Alors Gambas est très simple, fallait juste savoir, mais c'est pas écrit.

Si il y a de la place quelque part, je veux bien faire des petits tuto vidéo ou capture d'écran,
au fur et à mesure de mes progrès pour les plus nuls que moi
parce que la doc n'est pas très explicite pour les néos.

Longue vie à la crevette joyeuse.
Si tu veux rendre un homme heureux un jour, donnes lui à manger
Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher
siscard06#29 Posté le 5/6/2012 à 06:08:09
Bon, j'ai trouvé l'erreur

Elle provient probablement de l'emetteur (la balance).
Dans le texte à afficher, il y a un caractère non affichable (CHR$(0) qui veut dire "nul") en trop à la 9° position.
Il suffit de faire une petite fonction genre Trim pour l'éliminer (Trim ne fonctionne que sur les extrémités):
-Tester si code Ascii de 1° caractère > 32 si oui, l'insérer dans une nouvelle chaine
sinon poubelle
suivant jusqu'à 18

Ca devrait pas être trop dur, et je commence à bien connaitre la doc

En cas de Pb, je fais un nouveau sujet sur l'élimination des indésirables

En tous cas, grand merci à ceux qui m'ont aidé.
Si tu veux rendre un homme heureux un jour, donnes lui à manger
Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher
12