Gambas France BETA


Pas de compte ? Incription

ComboBox du pauvre

À propos de ce code

Marre des ComboBox à rallonge qui mange un partie de l'écran dès que ça dépasse 20 items...
Essayez le ComboBox Du Pauvre... :o
Fonctionne aussi bien avec le composant <gb.gui> qu'avec <gb.qt4>
Codé avec Gambas3.5.3
Tout est dans le code toutes modifications et ou améliorations seront les bienvenues.

Ajout de menus Fichier/Quitter, Langage et différentes traductions...
Un exemple dans l'exemple :D ...

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
' Gambas class file

'--------------------------------------------------------------------
'
' Auteur : Didier18
' Questions sur ce soft, laisser MP sur le site.
'
' Remerciements :
' Flachy Joe (simplification de ligne de code)
' spheris (tradution et exemples)
' Jack (idée de résolution sur traduction)
'
' http://www.gambasforge.org (hebergement du présent exemple)
'
'--------------------------------------------------------------------
'
PRIVATE CBBox AS NEW ComboBox(ME)
PRIVATE CBBoxDuPauvre AS NEW ButtonBox(ME) AS "CBBoxDuPauvre"
PRIVATE CBBoxDuPauvreListe AS NEW ListBox(ME) AS "CBBoxDuPauvreListe"
PRIVATE lblOriginal AS NEW Label(ME)
PRIVATE lblDuPauvre AS NEW Label(ME)
PRIVATE mylanguage AS STRING = "fr"

PUBLIC SUB _new()
END

PUBLIC SUB Form_Open() 'ce que l'on fait au lancement du programme
DIM i AS INTEGER
ME.Center 'Centre la fenêtre dans l'écran
updatetranslation()
lblOriginal = NEW Label(ME) 'création d'1 label
lblOriginal.Move(20, 10, 100, 40) 'redimensionne et place le label
lblOriginal.Caption = ("ComboBox") & Chr(10) & ("Original") 'texte écrit dans le label
lblDuPauvre = NEW Label(ME) 'création d'1 label
lblDuPauvre.Move(150, 10, 100, 40) 'redimensionne et place le label
lblDuPauvre.Caption = ("ComboBox") & Chr(10) & ("Du pauvre") 'texte écrit dans le label
'
'------------------------------------ComboBox qt--------------------
'
FOR i = 0 TO 30 'on remplis le Combobox
CBBox.add("Item" & i, i) 'il affichera (Item et son index) et son (index) dans le ComboBox
NEXT
CBBox.Move(10, 50, 100, 24) 'redimensionne et place le ComboBox
'
'------------------------------------ComboBox du pauvre--------------
'
FOR i = 0 TO 30 'on remplis le CBBoxDuPauvreListe
CBBoxDuPauvreListe.Add("Item" & i, i)
NEXT
CBBoxDuPauvre.Move(150, 50, 100, 24) 'redimensionne et place le CBBoxDuPauvre
CBBoxDuPauvreListe.Move(150, 74, 100, 150) 'redimensionne et place le CBBoxDuPauvreListe
CBBoxDuPauvreListe.Visible = FALSE 'cache CBBoxDuPauvreListe
CBBoxDuPauvre.Text = CBBoxDuPauvreListe.List[0] 'on écrit une valeur dans CBBoxDuPauvre
END

PUBLIC SUB CBBoxDuPauvre_Click() 'Lorsque l'on clique sur le bouton du ComboBox Du Pauvre
'Merci à Flachy Joe pour ce bout de code...
CBBoxDuPauvreListe.Visible = NOT CBBoxDuPauvreListe.Visible 'CBBoxDuPauvreListe n'est pas visible... On le rend visible
IF CBBoxDuPauvreListe.Visible THEN CBBoxDuPauvreListe.SetFocus 'si CBBoxDuPauvreListe est visible alors on lui passe le focus
END

PUBLIC SUB CBBoxDuPauvreListe_Click() 'Lorque l'on clique sur 1 item de la liste
DIM i AS INTEGER
i = CBBoxDuPauvreListe.Index 'on récupère l'index sur lequel on a cliqué
CBBoxDuPauvre.Text = CBBoxDuPauvreListe.List[i] 'on affiche dans le ComboBox Du Pauvre l'item en fonction de l'index
CBBoxDuPauvreListe.Visible = FALSE 'puis on cache CBBoxDuPauvreListe
END

PUBLIC SUB CBBoxDuPauvreListe_KeyPress() 'ce que l'on fait si on clique sur ce menu
DIM i AS INTEGER
i = CBBoxDuPauvreListe.Index 'on récupère l'index sur lequel on est positionné
'on affiche dans le ComboBox Du Pauvre l'item en fonction de l'index
IF Key.code = Key.Return THEN CBBoxDuPauvre.Text = CBBoxDuPauvreListe.List[i]
CBBoxDuPauvreListe.Visible = FALSE 'puis on cache CBBoxDuPauvreListe
END

PRIVATE SUB updatetranslation() 'ce que l'on fait si on clique sur ce menu
'C'est ici que se passe la traduction.
'On a récupéré via le menu, la langue de translation.
'Elle est associée à la feuille du même nom...
DIM myfile AS File
'on ouvre myfile (qui est dans le chemin...) en lecture
myfile = OPEN Application.Path & "/" & mylanguage FOR READ
LINE INPUT #myfile, ME.Text 'on traduit le titre de la fenêtre
LINE INPUT #myfile, mnu_fichier.Caption 'on traduit le menu Fichier
LINE INPUT #myfile, mnu_quitter.Caption 'on traduit le menu Quitter
LINE INPUT #myfile, mnu_lang.Caption 'on traduit le menu Langage
LINE INPUT #myfile, mnu_en.Caption 'on traduit le men Anglais
LINE INPUT #myfile, mnu_es.Caption 'on traduit le menu Espagnol
LINE INPUT #myfile, mnu_fr.Caption 'on traduit le menu Français
LINE INPUT #myfile, mnu_it.Caption 'on traduit le menu Italien
LINE INPUT #myfile, mnu_ru.Caption 'on traduit le menu Russe
LINE INPUT #myfile, lblOriginal.Caption 'on traduit le label lblOriginal
LINE INPUT #myfile, lblDuPauvre.Caption 'on traduit le label lblDuPauvre
CLOSE #myfile 'on ferme myfile
END

PUBLIC SUB mnu_en_Click() 'ce que l'on fait si on clique sur ce menu
mylanguage = "en" 'indique la feuille de translation
updatetranslation() 'puis on actualise
END

PUBLIC SUB mnu_es_Click() 'ce que l'on fait si on clique sur ce menu
mylanguage = "es" 'indique la feuille de translation
updatetranslation() 'puis on actualise
END

PUBLIC SUB mnu_fr_Click() 'ce que l'on fait si on clique sur ce menu
mylanguage = "fr" 'indique la feuille de translation
updatetranslation() 'puis on actualise
END

PUBLIC SUB mnu_it_Click() 'ce que l'on fait si on clique sur ce menu
mylanguage = "it" 'indique la feuille de translation
updatetranslation() 'puis on actualise
END

PUBLIC SUB mnu_ru_Click() 'ce que l'on fait si on clique sur ce menu
mylanguage = "ru" 'indique la feuille de translation
updatetranslation() 'puis on actualise
END

PUBLIC SUB mnu_quitter_Click() 'ce que l'on fait si on clique sur ce menu
QUIT 'on quitte
END

Commentaires

Commentaire de davidmue, Le 16/4/2014 à 10:21:15
Salut didier18 !
C'est vrai que les combobox à rallonge ; c'est pas très joli!
L'idée est bonne.
Je n'ai pas encore tenté la personnalisation de contrôles.
Bravo pour cet exemple, ça montre des possibilités.
J'ai testé et en gros, à la souris, ça fonctionne bien.
Pour info., je viens de voir que si tes utilisateurs n'utilisent que le
clavier, il ne peuvent pas sélectionner toutes les valeurs dans la liste du combobox du pauvre.
J'ai cherché un peu mais je n'ai aucune idée du pourquoi !
Bravo encore et bonne journée.

Commentaire de didier18, Le 16/4/2014 à 20:01:05
Bonsoir davidmue

Voici le correctif :
Insérer entre la ligne 47 et 48 le code suivant...

CBBoxDuPauvreListe.SetFocus 'donne le focus à la CBBoxDuPauvreListe

Maintenant on peut se déplacer dans la liste avec le touches flèchées ou PgUp / PgDn Home / End
Et pour valider il faut ajouter une sub qui va gérer les touches... du style :

Public Sub CBBoxDuPauvreListe_KeyPress()
Dim i As Integer
i = CBBoxDuPauvreListe.Index 'on récupère l'index sur lequel on est positionné
'on affiche dans le ComboBox Du Pauvre l'item en fonction de l'index
If Key.code = Key.Return Then CBBoxDuPauvre.Text = CBBoxDuPauvreListe.List
CBBoxDuPauvreListe.Visible = False 'puis on cache CBBoxDuPauvreListe
End[

A supposer que l'utilisateur sélectionnera l'item grace à la touche 'Enter'.
Bons tests...

Commentaire de didier18, Le 16/4/2014 à 20:25:10
Pour plus de simplicité, j'ai modifié le code...
Commentaire de Flachy Joe, Le 25/4/2014 à 19:49:35
Salut,
bonne idée, mais ce code est pas terrible :
1
2
3
4
5
6
7
SELECT CBBoxDuPauvreListe.Visible 'selon la valeur de CBBoxDuPauvreListe (visible ou pas)
CASE TRUE 'CBBoxDuPauvreListe est visible
CBBoxDuPauvreListe.Visible = FALSE 'cache CBBoxDuPauvreListe
CASE FALSE 'CBBoxDuPauvreListe est non visible
CBBoxDuPauvreListe.Visible = TRUE 'affiche CBBoxDuPauvreListe
CBBoxDuPauvreListe.SetFocus 'donne le focus à la CBBoxDuPauvreListe
END SELECT

et devrait être remplacé par :
1
2
CBBoxDuPauvreListe.Visible= NOT CBBoxDuPauvreListe.Visible
IF CBBoxDuPauvreListe.Visible THEN CBBoxDuPauvreListe.SetFocus


Bonne continuation !
Commentaire de didier18, Le 26/4/2014 à 21:40:00
Bonsoir Flachy Joe

Merci pour l'amélioration proposée et acceptée (code original modifié).
Effectivement c'est plus court gain de 5 lignes par rapport au code précédent.
J'ai commenté (à ma sauce), le principal c'est que cela serve à quelqu'un un jour...

A bientôt.

Commentaire de K64, Le 27/3/2016 à 16:37:10
x année plus tard ........

oui ça sert à quelqu'un

merci.... :lol: