IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

Grids Firemonkey : modifier une hauteur de ligne


Sujet :

Composants FMX Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4
    Points
    4
    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 ?

  2. #2
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    En fait, les TStringsGrid VCL et Firemonkey sont implémentés différement, le deuxième est plus limité à priori.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4
    Points
    4
    Par défaut
    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.

  4. #4
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    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

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4
    Points
    4
    Par défaut
    Oui chaplin, je vais faire les deux, pour voir :
    - adapter le TCustomGrid
    - assembler des TListBox

  6. #6
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    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.

  7. #7
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4
    Points
    4
    Par défaut
    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 !

Discussions similaires

  1. supprimer/modifier une ou plusieurs lignes d'un tableau
    Par luffy2mars dans le forum Taglibs
    Réponses: 1
    Dernier message: 20/11/2009, 14h15
  2. modifier la hauteur des lignes dans SWT Table
    Par lok9009 dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 18/09/2009, 11h39
  3. Modifier la hauteur des lignes du ListView
    Par David Fouejio dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/08/2009, 13h50
  4. spécifier une hauteur de ligne à ma datagrid
    Par martala dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/02/2008, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo