Précédent   Forum des professionnels en informatique > Environnements de développement > Delphi > Composants FMX
Composants FMX Utilisation des différents composants FMX (FireMonkey Framework)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2011, 16h53   #1
Invité de passage
 
Homme Xavier Denimal
Ingénieur développement logiciels
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Xavier Denimal
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 3
Points : 3
Par défaut Grids Firemonkey : modifier une hauteur de ligne

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 ?
denix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 19h31   #2
Membre Expert
 
Avatar de chaplin
 
Inscription : août 2006
Messages : 1 068
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 068
Points : 1 213
Points : 1 213
En fait, les TStringsGrid VCL et Firemonkey sont implémentés différement, le deuxième est plus limité à priori.
chaplin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2011, 16h35   #3
Invité de passage
 
Homme Xavier Denimal
Ingénieur développement logiciels
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Xavier Denimal
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 3
Points : 3
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.
denix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2012, 13h08   #4
Membre Expert
 
Avatar de chaplin
 
Inscription : août 2006
Messages : 1 068
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 068
Points : 1 213
Points : 1 213
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
chaplin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2012, 18h24   #5
Invité de passage
 
Homme Xavier Denimal
Ingénieur développement logiciels
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Xavier Denimal
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 3
Points : 3
Oui chaplin, je vais faire les deux, pour voir :
- adapter le TCustomGrid
- assembler des TListBox
denix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 10h19   #6
Membre Expert
 
Avatar de chaplin
 
Inscription : août 2006
Messages : 1 068
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 068
Points : 1 213
Points : 1 213
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.
chaplin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 11h45   #7
Invité de passage
 
Homme Xavier Denimal
Ingénieur développement logiciels
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Xavier Denimal
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 3
Points : 3
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 !
denix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h17.


 
 
 
 
Partenaires

Hébergement Web