Gambas France BETA


Pas de compte ? Incription

exempleappgroupe

À propos de ce code

Bonjour

Un petit exemple pour la mise en évidence de l'utilisation des "groupes"...
- Le passage du pointeur sur une pbx affiche sa valeur "Tag"
- Cliquer sur une pbx change son image et modifie setat.
- Il sera aisé de simuler l'état précédent en enregistrant le dernier état dans un fichier settings, par exemple.
Tout est dans le code (y compris les commentaires).
NB : l'exemple ne traite que 16 pbx... On pourra donc convertir la valeur de setat en hexadécimal pour une éventuelle programmation d'eeprom ou pour une manipulation plus aisée de setat.

Bonne journée.

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
' Gambas class file

PUBLIC betat AS BOOLEAN 'état d'un pin
PUBLIC setat AS STRING 'état général des pins

PUBLIC lbl AS NEW Label(ME) 'label pour visualisation d'état
PUBLIC pbx AS NEW PictureBox[] 'déclaration d'un tableau de PictureBox
PUBLIC pnl AS NEW Panel[] 'déclaration d'un tableau Panel

PUBLIC SUB _new()
crecompo() 'procédure dédiée à la création des composants
initcompo() 'initialisation des composants
END

PUBLIC SUB Form_Open()
actusetat() 'actualise setat
END

PUBLIC SUB grpbx_MouseDown() 'lorsque l'on clique sur une des pbx
IF pbx[LAST.Tag].Picture = Picture["icon:/16/lamp"] THEN betat = FALSE 'si la pbx a cette image alors betat est faux
IF pbx[LAST.Tag].Picture = Picture["icon:/16/important"] THEN betat = TRUE 'si la pbx a cette image alors betat est vrai
betatinverse() 'inverse l'image de la pbx
END

PUBLIC SUB grpbx_Enter() 'lorsque le pointeur passe sur une des pbx
pbx[LAST.Tag].Tooltip = ("pbx ") & pbx[LAST.Tag].Tag 'affiche la valeur Tag de la pbx dans son tooltip
END

PUBLIC SUB grpbx_Leave() 'lorsque le pointeur sort d'une pbx
pbx[LAST.Tag].Tooltip = "" 'efface le tooltip
END

PRIVATE SUB actusetat() 'actualise setat
DIM i AS INTEGER
lbl.Caption = "" 'initialise lbl
setat = "" 'initialise setat
FOR i = 0 TO 15 'pour chaque pbx on va relever sa valeur
IF pbx[i].Picture = Picture["icon:/16/lamp"] THEN 'si la pbx affiche cette image
setat &= 0 'alors la valeur binaire = 0 (on concatène dans la chaine)
ELSE 'sinon
setat &= 1 'alors la valeur binaire = 1 (on concatène dans la chaine)
ENDIF
NEXT
lbl.Caption = ("Valeur de setat = ") & setat 'affiche la valeur générale de setat
END

PRIVATE SUB betatinverse() 'inverse l'image de la pbx
IF betat THEN 'si betat est vrai
pbx[LAST.Tag].Picture = Picture["icon:/16/lamp"] 'affiche bleu
ELSE 'sinon
pbx[LAST.Tag].Picture = Picture["icon:/16/important"] 'affiche rouge
ENDIF
actusetat() 'actualise setat
END

PRIVATE SUB crecompo() 'procédure dédiée à la création des composants
DIM i AS INTEGER
'--------------------------------------------------
'création des pannels
'--------------------------------------------------
FOR i = 0 TO 4 'nbr de panels qui sont créés
pnl.Add(NULL, pnl.Count) 'on ajoute un panel et on le compte
pnl[i] = NEW Panel(ME) 'le composant (comptabilisée par i) est un nouveau composant
pnl[i].Tag = i 'on met le n° du composant (i) dans sa propriété .tag
NEXT
' pnl[0] affichage chaine(FMain)
' pnl[1] intercalaire gauche(FMain)
' pnl[2] contient la valeur des pbx(FMain)
' pnl[3] intercalaire droite(FMain)
' pnl[4] contient l'appli(FMain)
'--------------------------------------------------
'création des PictureBox
'--------------------------------------------------
FOR i = 0 TO 15 'pour i on compte de 0 à 15 (donc 16)
pbx.Add(NULL, pbx.Count) 'on ajoute une picturebox et on la comptabilise
pbx[i] = NEW PictureBox(ME) AS "grpbx" 'la picturebox (comptabilisée par i) est une nouvelle picturebox qui est créé dans pnl[2] et qui fait partie du Groupepbx
pbx[i].Tag = i 'on met dans la propriété .tag de la picture box un numéro (i)
WITH pbx[i] 'pour la pbx en cours (donc pour chaque pbx)
.Reparent(pnl[2], 0, 0) 'la changer de container
.H = 20 'initialise sa hauteur
.Picture = Picture["icon:/16/lamp"] 'Picture["icon:/16/important"]
.Stretch = TRUE 'l'image sera ajusté à la pbx
END WITH
NEXT 'on passe à la pbx suivante

END

PRIVATE SUB initcompo() 'initialisation des composants
DIM i AS INTEGER
'--------------------------------------------------
'préparation du formulaire
'--------------------------------------------------
WITH ME 'configuration du formulaire
.Arrangement = 2
.H = 480 'hauteur du composant
.Title = Application.Title & " " & Application.Version 'ce qui est affiché dans la barre de titre de l'application
.W = 300 'largeur du composant
.X = 50 'placement x dans l'écran
.Y = 20 'placement y dans l'écran
END WITH
WITH pnl[0] 'affichage chaine setat(FMain)
.Arrangement = 1 'les enfants seront rangés horizontalement
.H = 35 'hauteur du pnl
END WITH
WITH lbl 'visu générale de setat
.Reparent(pnl[0], 0, 0) 'place le lbl dans le pnl[0]
.Expand = TRUE 'le lbl ajustera sa taille au container
END WITH
WITH pnl[4] 'contient l'appli(FMain)
.Arrangement = 1 'les enfants seront rangés horizontalement
.Expand = TRUE 'le pnl ajustera sa taille au container
END WITH
WITH pnl[1] 'intercale gauche(FMain)
.Reparent(pnl[4], 0, 0) 'déplace le pnl[1] dans le pnl[0]
.Expand = TRUE 'le pnl ajustera sa taille au container
END WITH
WITH pnl[2] 'contient la valeur des pbx(FMain)
.Reparent(pnl[4], 0, 0) 'déplace le pnl[1] dans le pnl[0]
.Arrangement = 2 'les enfants seront rangés verticalement
.Spacing = TRUE 'espace automatiquement les enfants
.W = 20 'largeur du pnl
END WITH
WITH pnl[3] 'intercale droite(FMain)
.Reparent(pnl[4], 0, 0) 'déplace le pnl[1] dans le pnl[0]
.Expand = TRUE 'le pnl ajustera sa taille au container
END WITH
END

Commentaires