Gambas France BETA


Pas de compte ? Incription

howmuch4

À propos de ce code

Création d'une class de composant par héritage du composant TextBox
Ajout de deux propriétés : Value et Format

Code source

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
' Gambas class file

INHERITS TextBox '<--------------------------------------------------------- Tout l'héritage du composant TextBox
'<----------------------------------------------------------------------------- (Export) pour créer la class dans l'IDE
EXPORT
'<------------------------------- remarquez les doubles '' pour faire apparaître les commentaires en explication des objets dans l'IDE
PRIVATE $value AS FLOAT ''Contient la valeur numérique
PRIVATE $regPat AS STRING ''Pattern des expressions réguliéres
PRIVATE $format AS STRING ''Contient le formatage de la variable
PRIVATE $regex AS NEW RegExp ''Contrôle l'entrée, il faut activer gb.pcre
PRIVATE $bFocus AS BOOLEAN ''Boolean du focus

'<------------------- Début propriétés ajoutées à TextBox ---------------------
PROPERTY Value AS FLOAT ''Valeur float de la textbox
PROPERTY Format AS STRING ''On passe le format que l'on souhaite voir en sortie

PRIVATE SUB Value_Write(Value AS FLOAT) '<------------------------------------- la propriété Value de notre TextBox

$value = Value '<--------------------------------------------------------- récupération de la valeur et transmision à la variable locale

END

PRIVATE FUNCTION Value_Read() AS FLOAT '<------------------------------------- la propriété Value de notre TextBox

RETURN $value '<---------------------------------------------------------- renvoi de la propriété

END

PRIVATE SUB Format_Write(sFormat AS STRING) '<------------------------------- la propriété Format de notre TextBox

$format = sFormat '<------------------------------------------------------ récupération de la valeur et transmision à la variable locale

END

PRIVATE FUNCTION Format_Read() AS STRING '<--------------------------------- la propriété Format de notre TextBox

RETURN $format '<--------------------------------------------------------- renvoi de la propriété

END
'<-------------------- Fin propriétés ajoutées à TextBox ----------------------

PUBLIC SUB _new()

DIM obs AS Observer

obs = NEW Observer(ME) AS "obs" '<----------------------------------------- nouvel observateur pour récupérer les évènements
$regPat = Fmain.sRegTransf '<--------------------------------------------- pattern de l'expression régulière
$regex.Compile($regPat) '<------------------------------------------------- on précompile l'expression régulière
$bFocus = TRUE '<---------------------------------------------------------- initialisation du boolean

END

PUBLIC SUB obs_Change() ''Contrôle de la saisie

IF ME.text THEN '<--------------------------------------------------------- pour ne pas avoir d'erreur de texte vide
$regex.Exec(ME.Text) '<--------------------------------------------- test de la valeur au crible de l'expression régulière
ME.Text = $regex.Text '<--------------------------------------------- isNumber() donc on récupère chaque chiffre
IF ME.Text MATCH "." THEN ME.Text = Replace(ME.Text, ".", ",") '<----- pour récupérer la virgule à partir du point
IF ME.text THEN $value = Val(ME.Text)
IF ME.Value > 20000000 THEN '<----------------------------------------- pour ne pas dépasser la somme
ME.Value = 0
ME.Clear
ME.SetFocus
ENDIF
ELSE
$value = 0
ENDIF

END

PUBLIC SUB obs_Lostfocus() ''Le format ne sera appliqué qu'après

IF ME.Text THEN
$value = Val(Format($value, "#.##")) '<----------------------------- on s'assure que le texte est une suite de chiffres sans format
IF $format THEN
Object.Lock(ME) '<------------------------------------------------- on verrouille l'objet pour ne pas appeler l'event Change
ME.Text = Format($value, $format) '<----------------------------- on formate le texte comme voulu
Object.Unlock(ME) '<----------------------------------------------- on deverouille l'objet
ENDIF
$bFocus = NOT $bFocus '<--------------------------------------------- inversion du boolean
ELSE
ME.Clear
ENDIF

END

PUBLIC SUB obs_Gotfocus() ''Pour être certain d'avoir à la fois une valeur et un texte

IF $value = 0 THEN
ME.Clear
ELSE
ME.Text = Format($value, "#.##") '<--------------------------------- on s'assure que le texte est une suite de chiffres sans format
$bFocus = NOT $bFocus '<--------------------------------------------- inversion du boolean
ENDIF

END

PUBLIC SUB obs_Activate() ''L'utilisateur tape sur entrée et bascule l'affichage

SELECT CASE $bFocus
CASE TRUE
obs_Lostfocus() '<------------------------------------------------- le composant perd le focus
CASE FALSE
obs_Gotfocus() '<------------------------------------------------- le composant gagne le focus
END SELECT

END

Commentaires