|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Xavier DenimalIngénieur développement logiciels Inscription : décembre 2011 Messages : 6 ![]() |
Bonjour,
Je suis en train de découvrir les composants Firemonkey. Je voudrais utiliser une TGrid pour afficher des relations maîtres / détails façon InfoPower (une Grid détails insérée dans une Grid sous une ligne maitre) : http://woll2woll.net/OverviewInfoPow...s/image009.jpg Je butte sur une chose très simple : affecter une hauteur de ligne différente de la hauteur par défaut. Avec le TStringGrid VCL, pas de pb. avec RowHeights[i] Avec Firemonkey, le code de la TGrid ne me parait pas prévoir ce genre de chose : les calculs de positionnement sont basés uniquement sur la hauteur de ligne par défaut. Est-ce un "oubli" dans les fonctionnalités du composant FMX ou est-ce que je me trompe de logique d'utilisation de ce composant ? |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 068 ![]() |
En fait, les TStringsGrid VCL et Firemonkey sont implémentés différement, le deuxième est plus limité à priori.
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Xavier DenimalIngénieur développement logiciels Inscription : décembre 2011 Messages : 6 ![]() |
Merci chaplin, ça confirme ce que j'avais vu dans le code source.
Je me demande quand même s'il n'y a pas une façon simple estampillée FMX de contourner cette limitation (je veux dire autre que de dériver TCustomGrid), pour cette fonctionnalité standard qu'est une définition de hauteur par ligne. Par exemple, les limitations apparentes d'autres composants comme TStatusBar (pas de volets) sont largement couvertes par la possibilité de placer d'autres composants (TEdit, TProgressBar, ...) directement dessus. On peut assez facilement bricoler la fonctionnalité voulue (Grid à hauteur de ligne variable) avec un panel, des TButtons en guise de header de colonnes et des TListBox en guise de colonnes (ce composant autorise la définition d'une hauteur de ligne par item), mais est-ce bien une piste "orthodoxe" avec FMX ? Bonne année à tous. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 068 ![]() |
Tu reprends le code source du TCustomGrid en le renommant autrement et tu modifies le code en conséquence de tes besoins.
Bonne année |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Xavier DenimalIngénieur développement logiciels Inscription : décembre 2011 Messages : 6 ![]() |
Oui chaplin, je vais faire les deux, pour voir :
- adapter le TCustomGrid - assembler des TListBox |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 068 ![]() |
Pour un dérivé de TCustomGrid, il faudrait créé une colonne dédiée pour développer l'arborescence et ainsi afficher une instance de la même classe dans la ligne dilatée, en donnant la possibilité de modifier la hauteur de ligne au composant(tableau dynamique). Du moins, c'est l'idée qui me vient en tête.
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Xavier DenimalIngénieur développement logiciels Inscription : décembre 2011 Messages : 6 ![]() |
Tout à fait, chaplin.
Voilà comment j'ai procédé pour modifier le CustomGrid : - ajout d'une propriété FRowHeights à TCustomGrid, qui est un tableau dynamique de Record donnant la hauteur de la ligne et la coordonnée du haut de la ligne ... les valeurs étant des Single. - ajout d'une méthode UpdateRowHeights qui met à jour FRowHeights en fonction de RowCount et RowHeight (valeur par défaut) - ajout de la propriété CellTops[index] avec son getter, qui renvoie la coordonnée du haut de la ligne à l'index donné - ajout de la propriété RowHeights[index] avec ses getter et setter, qui renvoie la hauteur d'une ligne à l'index donné, ou qui permet l'affectation de la hauteur de ligne (le setter met également à jour FRowHeights pour les coordonnées de hauts de lignes) - adaptation des méthodes Create (initialisation de FRowHeights avec le hauteur par défaut), UpdateColumn, UpdateSelection, UpdateColumns, DoContentPaint, DoContentPaint2, GetContentBounds, RowByPoint, GetTopRow, GetVisibleRows, SetSelected (remplacement des calculs effectués avec la hauteur par défaut par les données issues de FRowHeights). Voilà, il faut encore peaufiner les nouvelles méthodes pour traiter les cas limites, mais ça marche. Cela dit, l'assemblage de ListBox est plus simple : il faut juste écrire les méthodes de synchronisation (sélection et déroulement), et ça me parait être plus en accord avec la "philosophie" de FireMonkey. Mais c'est juste un feeling qui demande à être confirmé par l'expérience ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com