Gambas France BETA


Pas de compte ? Incription

Format d'un ValueBox

Ce sujet est résolu.

123
AuteurMessages
valaquarus#1 Posté le 28/6/2022 à 10:18:21
-- Unus Ex Altera --Bonjour à tous,
y a t il moyen de modifier le format d'affichage (en temps réel) d'un ValueBox en type number ou doit on se contenter de regarder passer les trains ?
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
vuott#2 Posté le 28/6/2022 à 10:51:24
Ne cedere ineluctabili possimusBonjour.
Pardon, qu'entendez-vous par «format d'affichage d'une ValueBox dans un type numérique» ?
Pouvez-vous clarifier ?
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#3 Posté le 28/6/2022 à 11:17:16
-- Unus Ex Altera --Bonjour Vuott,
oui je voudrais que mes valueBox affiche un format du style "###,###.##" au lieu d'aligner les chiffres les uns après les autres ce qui n'est pas beau et difficile de lecture.
les valueBox de type currency le font (mais ne prennent pas en compte le point comme virgule alors que les types number le font).
J'espère avoir été assez clair pour me faire comprendre.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
vuott#4 Posté le 28/6/2022 à 11:47:43
Ne cedere ineluctabili possimusDans le forum allemand, j’ai proposé cette solution: :|

https://www.gambas-club.de/viewtopic.php?f=3&t=4849&p=10890#p10890

Plus brièvement, vous pouvez obtenir le même résultat comme ceci:
1
2
3
4
5
6
7
8
PUBLIC SUB Form_Open()

DIM numerus AS FLOAT = 1000000.12
DIM tb AS TextBox = ValueBox1.Children[0]

tb.Text = Format(numerus, "#,###,###,###.##")

END
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#5 Posté le 28/6/2022 à 12:50:59
-- Unus Ex Altera --Vuott,
votre proposition fonctionne si on rajoute un textBox qui récupère l'affichage du valueBox.
Ce n'est pas ce que je veux ou je ne sais pas exploité correctement ce que vous proposez.
Dans le petit test : howmuch2 téléchargeable sur la forge, je voudrais que celui qui saisi un nombre dans ce valueBox le voit s'afficher avec le format "#,###.##".
Si je transforme le valueBox de type number en type currency cela fait le job mais je ne peux plus utiliser le point comme virgule comme avec le type number.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
vuott#6 Posté le 28/6/2022 à 13:12:12
Ne cedere ineluctabili possimus
....fonctionne si on rajoute un textBox qui récupère l'affichage du valueBox.

ehmmm...je ne comprends pas pourquoi vous dites que vous devez ajouter un TextBox. :|


... s'afficher avec le format "#,###.##".

c'est-à-dire ce format doit-il être affiché ? 1,234.56
Comme le format U.S.A. ?
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#7 Posté le 28/6/2022 à 13:46:49
-- Unus Ex Altera --Vuott,
non c'est bien le format local (ici français) que je veux afficher.
J'ai ajouté un textbox de contrôle de l'affichage mais je n'ai pas réussi à afficher cela dans le valueBox directement.
1
2
3
4
5
6
7
8
9
10
11
PUBLIC SUB vsomme_Change()

IF vsomme.value > 20000000.00 THEN '<------------------------------------- on efface les champs pour ces valeurs
vsomme.Value = 0
ENDIF

TextBox1.Text = Format(vsomme.Value, "#,###.##")

Calculs() '<------------------------------------------------------------- calculs directs à chaque change

END

En fait je ne sais comment utiliser ceci :
1
Object.SetProperty(vsomme.Children[0], "text", Format(vsomme.Value, "$#,###.##"))

ni même si c'est bien reporté car le programme me renvoie une erreur null au lieu de float même si j'assigne une valeur à vsomme.value.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#8 Posté le 28/6/2022 à 14:05:31
-- Unus Ex Altera --Vuott,
ça fonctionne pour le premier millier ça s'affiche dans le valueBox comme voulu mais de suite j'ai l'erreur null au lieu de float logique puisque il y a un espace dans le nombre.
Et si je rajoute vsomme.value=cfloat(vsomme.text) j'ai un débordement de pile.
Philippe
1
2
3
4
5
6
7
8
9
10
11
PUBLIC SUB vsomme_Change()

IF vsomme.Value > 20000000.00 THEN '<------------------------------------- on efface les champs pour ces valeurs
vsomme.Value = 0
ENDIF

Object.SetProperty(vsomme.Children[0], "Text", Format(vsomme.Value, "#,###.##"))

Calculs() '<------------------------------------------------------------- calculs directs à chaque change

END
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
Patrick#9 Posté le 28/6/2022 à 15:38:47
Bonjour,
Une solution serait de créer une classe qui hérite de TextBox et qui gérerait les float avec l'affichage.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
INHERITS TextBox
EXPORT

PRIVATE $value AS FLOAT

PROPERTY Value AS FLOAT


PRIVATE FUNCTION Value_Read() AS FLOAT

RETURN $value

END

PRIVATE SUB Value_Write(Value AS FLOAT)

ME.text = Format(Value, "0.00")
$value = Value

END
valaquarus#10 Posté le 28/6/2022 à 18:15:32
-- Unus Ex Altera --Merci Patrick,
j'ai créé cette classe et maintenant comment je m'en sers ?
Philippe.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
Patrick#11 Posté le 29/6/2022 à 06:04:42
On s'en sert comme d'une TextBox qui a une propriété Value. Le mot clé Export fait que on a cette classe dans qui apparaît dans l'IDE et c'est en manipulant la propriété Value que l'on s'en sert.
Bien sur ce n'est qu'une ébauche, je peux déjà proposer une petite amélioration :
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
31
32
33
INHERITS TextBox
EXPORT

PRIVATE $value AS FLOAT

PROPERTY Value AS FLOAT

PUBLIC SUB _new()

DIM obs AS Observer

obs = NEW Observer(ME) AS "obs"

END

PUBLIC SUB obs_Lostfocus()

ME.Value = Val(ME.Text)

END

PRIVATE FUNCTION Value_Read() AS FLOAT

RETURN $value

END

PRIVATE SUB Value_Write(Value AS FLOAT)

ME.text = Format(Value, "0.00")
$value = Value

END
spheris#12 Posté le 29/6/2022 à 06:49:39
Ton evolution semble pas mal.
Si je comprends bien ce que tu as codé, tu voudrais que l'on puisse choisir le formatage de la 'valuebox' au format Date, monnaie ou autre?
Effectivement, cela pourrait être une propriété supplémentaire.
Je pense que tu as tout lieu de poster une demande sur gambas tracker pour leur demander de l'ajouter à la nouvelle mouture de GB.
valaquarus#13 Posté le 29/6/2022 à 08:05:31
-- Unus Ex Altera --@Patrick,
bon j'ai réussi à créer la bête dans l'ide, c'est plus simple (pour fainéant comme moi) pas besoin d'instancier, c'est fait et le nouveau container est utilisable de suite.
L'affichage se fait avec le format voulu, nickel.
La prochaine étape est de n'utiliser que ce composant pour faire les saisies aussi, pas que l'affichage.
Je testerai la deuxième version après.

@Spheris,
si tout fonctionne comme voulu, je te laisserai l'honneur de faire cette demande.

Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#14 Posté le 29/6/2022 à 09:08:23
-- Unus Ex Altera --@ tous,
je n'ai pas réussi à faire fonctionner le tb1 issu de la class1 (première mouture de Patrick) en saisie, par contre ça fonctionne bien en affichage ce qui compense.
Je mets cette dernière version sur la forge, je l'ai nommée howmuch3 (bof) pour ceux qui voudrais améliorer la chose.

Merci encore, Patrick car j'ai beaucoup appris sur la création de composant et sur leur utilisation facile dans l'IDE.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#15 Posté le 29/6/2022 à 14:06:41
-- Unus Ex Altera --@Patrick,
si je veux utiliser les Event Change et Keypress, doit on les déclarer et les définir dans maClass ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' Gambas class file

EXPORT
INHERITS TextBox

PRIVATE $value AS FLOAT

PROPERTY Value AS FLOAT

PRIVATE FUNCTION Value_Read() AS FLOAT
RETURN $value
END

PRIVATE SUB Value_Write(Value AS FLOAT)
ME.text = Format(Value, "$#,###.##")
$value = Value
END

Tu as entrouvert une porte et j'aimerais aller plus loin où se documenter pas à pas pour un béotien.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
123