Gambas France BETA


Pas de compte ? Incription

Modifier l'affichage dans une listbox

Ce sujet est résolu.

12
AuteurMessages
Foromus#1 Posté le 3/1/2017 à 19:56:35
Bonjour à tous et bonne année !

Certes, communauté un peu réduite, mais bon, on résiste...
Pour commencer l'année :
Dans une listbox, les termes sont tous affichés de la même façon, avec une police déterminée, soit dans les propriétés, soit par le code. En général, ça suffit.
Mais voilà, j'aimerais savoir si il est possible de modifier un élément (ou plusieurs) de la liste ?
Supposons n éléments, supposons que l'un soit "en panne", "en rupture", etc, ce serait bien si l'affichage passait, par exemple, en italique, montrant, du premier coup d'œil, que celui-là n'est pas disponible. Evidemment, si en plus, il pouvait passer en enable = false, ça serait le pied, même si, par le code, on peut arriver à gérer ce cas.
Mais pour l'affichage, je n'ai aucune idée...

Qu'en pensez-vous ?
Flachy Joe#2 Posté le 3/1/2017 à 22:45:13
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut Foromus,
il y a moyen d'accéder à l'objet GridView interne à la ListBox de manière à hacker un peu l'affichage.
Les (brefs) essais que j'ai fait résultent en une ligne non sélectionnable et je n'ai pas réussi à retourner à l'état initial. A creuser donc...

Exemple de texte en gras dans la 2nd ligne :
1
2
3
4
DIM GV AS GridView

GV = ListBox1.Children[0]
GV[1, 0].RichText = "<b>Test</b>"
;) Flachy Joe ;)
Foromus#3 Posté le 4/1/2017 à 20:13:52
Bonjour Flachy,

J'ai un peu essayé. J'ai mis une listbox, avec 5 éléments (element1.... element5)(Chargés dans list, dans les propriétés).
J'obtiens des trucs un peu bizarres : en voulant modifier element2 (GV[1, 0].RichText = "<b>element2</b>"), la ligne en question passe bien en gras, mais les 4 suivantes également... Ce qui n'est pas ce que je voulais.
J'ai un peu essayé de bidouiller les autres paramètres, je me suis retrouvé avec element5 en seconde position, voire avec un certain désordre.
Ce qui me gêne, c'est que je ne sais pas très bien ce que je fais. Après, si la listbox a des propriétés similaires à une GridView, je me perds un peu, dans ce sens que la listbox n'a qu'une seule colonne. Mais je ne sais pas exactement comment fonctionne la propriété "Mode", dans le cas de "Multiple", il est peut-être possible de mettre deux colonnes, non ? Pour le moment, je n'ai pas besoin de ce cas, une seule colonne me suffit (pour ce que je pourrais faire).
Patrick#4 Posté le 5/1/2017 à 08:18:24
Bonjour Foromus,
Chez moi ça fonctionne sans soucis, par contre le problème d'un RichText c'est que l’élément n'est plus sélectionnable, vaudrait mieux utiliser la propriété font. De même l'utilisation d'une gridview serait peut-être plus indiquée dans ce cas.
Mode.multiple permet de sélectionner plusieurs lignes en passant la valeur de listbox1.Selected à True. La sélection se fait à l'aide de la souris et de la touche Ctrl.

Bonne journée et meilleurs vœux pour cette nouvelle année.
Foromus#5 Posté le 5/1/2017 à 10:14:12
Bonjour à tous,

Voici le code de mes essais :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PUBLIC Elem AS STRING
PUBLIC Rang AS INTEGER


PUBLIC SUB Form_Open()

ME.Center
END

PUBLIC SUB ListBox1_Click()

Elem = ListBox1.Text
Rang = ListBox1.Index
Label1.text = "Elem = " & Elem
Label2.text = "Rang = " & Rang
END


PUBLIC SUB cmdModif_Click()
DIM GV AS GridView

GV = ListBox1.Children[0]
GV[Rang, 0].RichText = "<b>Elem</b>"
END




Le problème, c'est que la variable "Elem" n'est pas reconnue, normal, elle se trouve entre guillemets. En conséquence, ce qui est affiché, ici en gras, ce n'est pas l'élément choisi mais ce qui est dans le code ! Possible d'arranger ça dans un Select Case mais au-delà de 5 ou 6 éléments, ce n'est plus jouable.
Comme vous pouvez le voir, j'ai mis une liste, deux labels pour bien voir ce qui est cliqué - l'élément cliqué ne passe pas en surligné - ensuite, j'ai mis un bouton pour déclencher l'affichage. Quand j'utilise ce code, j'ai l'affichage suivant :



Ce n'est pas tout à fait ce que je recherche.
Patrick#6 Posté le 5/1/2017 à 11:48:33
Et si tu essayais :
1
gv[Rang, 0].richtext = "<b>" & ListBox1[Rang].Text & "</b>"
Foromus#7 Posté le 5/1/2017 à 11:58:47
J'ai essayé :
Patrick#8 Posté le 5/1/2017 à 14:05:20

Ça fonctionne.
Foromus#9 Posté le 5/1/2017 à 17:25:15
Là, y a un truc...
D'après la syntaxe, j'ai même mis GV au lieu de gv, j'ai même mis RichText au lieu de richtext, je ne vois pas trop où ça peut déconner...
J'ai même essayé de mettre i à la place de b...
Même résultat qu'à #7 à 11h58 !
Patrick#10 Posté le 5/1/2017 à 17:45:21
Dans les composants, coche gb.gui.qt au lieu de gb.gui.
Flachy Joe#11 Posté le 5/1/2017 à 20:45:10
Iguane : Il Gambas Uniquement pour Activer ses NEuronesEn fait tu peux aussi oublier la listbox et utiliser une gridview à une colonne avec la grille cachée et le mode de sélection à Single, l’apparence est la même.
Au niveau de l’accès aux données c'est un peu moins pratique mais c'est quand même facile.
;) Flachy Joe ;)
Foromus#12 Posté le 6/1/2017 à 13:29:46
Bonjour à tous,

Effectivement, en utilisant gb.gui.qt, ça marche.
J'ai tenté plusieurs fois d'utiliser les composants qt, mais j'y ai renoncé.
Je n'ai pas vraiment compris pourquoi il y avait toute ces propositions, dont certaines s'excluent l'une l'autre. Et je dois dire que si je veux faire un nouveau projet, je suis bien embarrassé parmi les propositions, j'ai déjà posté plusieurs fois sur le sujet de manière à lever mon embarras, mais je n'ai pas trouvé la réponse me satisfaisant.
Je serais tenté de dire que c'était plus simple en VB, mais il n'y a qu'une sorte de W$, alors que je suppose qu'il doit exister plus d'une centaine de distributions Linux : dans ces conditions, il me paraît difficile de proposer un truc universel. A près, même si les distributions sont nombreuses, nombre appartiennent à la même famille, par exemple, ubuntu et toutes ses variantes sont dérivées de Debian, il y aurait peut-être moyen de cibler plus facilement les variantes de Gambas. Enfin je dis ça, c'est un peu hasardeux, vu mon niveau, je ne me permettrais pas un avis tranché.
Tout compte fait, je me demande si je ne vais pas en rester là. Peut-être que si le courage revient - et les projets qui pourraient aller avec - je reprendrai la chose...
Merci beaucoup de vous être intéressé à mon problème.
gambix#13 Posté le 6/1/2017 à 16:35:53
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
PUBLIC STRUCT Elem
Nom AS STRING
Statut AS INTEGER
END STRUCT
PRIVATE $aElems AS NEW Elem[]


PUBLIC SUB Form_Open()
DIM hGrid AS NEW GridView(ME) AS "GridView1"
DIM i AS INTEGER
DIM hElem AS Elem

ME.Arrangement = Arrange.fill

FOR i = 0 TO 500
hElem = NEW Elem
hElem.Nom = "Item " & i
hElem.Statut = Rnd(0, 4)
$aElems.Add(hElem)
NEXT



hGrid.Columns.Count = 1
hGrid.Mode = Select.Single
hGrid.Rows.Count = $aElems.Count
hGrid.Rows.Border = Border("bottom:1;margin:2;radius:3")
END


PUBLIC SUB GridView1_Data(Row AS INTEGER, Column AS INTEGER)

IF (Row MOD 2) = 0 THEN LAST.Data.Background = Color.Lighter(Color.LightGray)

SELECT CASE $aElems[Row].Statut
CASE 1
LAST.Data.Foreground = Color.Red
CASE 2
LAST.Data.Font.Bold = TRUE
END SELECT

LAST.Data.Text = $aElems[Row].Nom
END

PUBLIC SUB GridView1_MouseUp()

Message("Click sur l'élément : " LAST.Row)

END



Ici j'ai utilisé une structure mai il vaut mieux privélégier une classe et un tableau de classe.

Je ne le répèterais jamais assez mais gridview est vraiment un outil a tout faire. Par example Listbox, ListView, TreeView, ColumnView, TableView sont écris en incluant un treeview et en gérant ses paramètres.

Il y a deux évènement magiques qui sont _Data et _Draw

_Data ( Row As Integer, Column As Integer )
_Draw ( X As Integer, Y As Integer, Width As Integer, Height As Integer, Row As Integer, Column As Integer )


Ces deux évènement sont levé avant le dessin de la case et peux passer soit des paramètre à l'élément en cour (dans Data), soit carrément dessiner dans la case:
Si par example je voulais un cercle dans ma case :

1
2
3
4
GridView1__Draw ( X AS INTEGER, Y AS INTEGER, Width AS INTEGER, Height AS INTEGER, Row AS INTEGER, Column AS INTEGER )
Paint.Ellipse(X,Y,Width,Height)
Paint.Stroke
END

Et voila :-)


Moins de texte dans une signature c'est agrandir son espace.
gambix#14 Posté le 6/1/2017 à 16:37:35
Faire simple !Bon attention la ça dessine un cercle dans toutes les cases :-P
1
2
3
4
IF Row=1 AND IF Column = 1 THEN
Paint.Ellipse(X, Y, Width, Height)
Paint.Stroke
ENDIF


Ne dessine que dans (1,1).
Moins de texte dans une signature c'est agrandir son espace.
gambix#15 Posté le 6/1/2017 à 16:59:34
Faire simple !Pour ce qui est des ToolKits... sous linux il y en a pleins... sous windows ou mac il y en a un. Bon c'est faut car gtk et qt sont multiplateforme.
Mais sous linux on a pas de standart c'est soit Qt soit Gtk soit WindowMaker, soit Elf, soit, soit soit... EN pratique, ça se limite surtout a QT et gtk. D'ou la présence de ces deux toolkits.

Un toolkit fournit les éléments qui compose les fenêtres (menu, bouton, etc). Mais chaque toolkit a sa propre api ... de plus qt est en C++ et gtk en C. donc gambas fournit une surcouche (layer) pour unifier tout ça a sa sauce. Les api qu'utilise l'utilisateur de gambas ne sont pas du tout celles des toolkit. C'est ce qui permet une grande homogénéité dans la façon d'utiliser les bibliothèque de gb.

Normalement on essais de gommer les différences de comportement entre qt et gtk ... mais a chaque mise a jour d'un de ces deux zozo.... surtout gtk au final.

C'est a case de ces difficulté de synchrnisation de comportement qu'on a commencé a refaire des composant graphique en gambas. J'avais commencé par iconview... ça a du plaire a Benoit car tou de suite après il a refait le gridview et tout les listview. Dernièrement on a eu l'editeur en gambas (Sérieux Benoit assure)... ça arrache, et nous avons pondu carrément un émulateur de terminal VT100 en gb (vous savez xterm et ses copains), en faite je voulais pouvoir manager finement un emulateur... difficile avec u emulateur embarqué. Et casse pied de devoir gérer une version gtk et kde).

La je bosse encore sur la barre de preview laterale de l'editeur de gb ... vous avez vu les dernières version de kate ?


Puis sur un petit widget spreadsheet (réécriture complète d'une grille), avec selection multiple, nommage de cellules et bien sûr résolutions.


Voila, pour quelques news... J'espère vraiment voir plus de gens coder avec nous ... Gambas est énorme ... dans tout les sens du terme...
Moins de texte dans une signature c'est agrandir son espace.
12