2011-11-02 3 views
7

J'essaie de créer ma première application basée sur FireMonkey, et je frappe un mur. Le seul contrôle de liste virtuelle que je peux trouver est tGrid.Firemonkey: Styling the tGrid ou d'autres composants Grid/List (Virtual)

Ce composant est plutôt bon, mais je n'arrive pas à comprendre comment l'étendre ou le personnaliser. Je comprends qu'il y a une colonne tCheckbox, une colonne tImage etc, mais que se passe-t-il si j'ai besoin d'un ButtonColumn ou quelque chose comme ça?

Je voudrais également styler une ligne, en fonction de l'état des données qu'elle représente. Exemple: si les données représentées sur la ligne ont "Error = True", elles doivent être affichées en rouge.

Est-ce que quelqu'un a eu un problème similaire? Ou trouvé d'autres composants de liste/grille virtuels? Ou même juste quelques conseils sur l'utilisation du composant tGrid. Ces composants sont essentiels dans toutes les applications de base de données, ce qui devrait être une requête assez courante.

Aussi juste comme une note, je ne pense pas que les supports TGrid Drag & Drop de lignes?

J'ai regardé Firemonkey version of VirtualTreeView et Firemonkey and large amounts of data

+0

Artis peut être je suis un peu en retard avec cela. Im nouveau dans le singe de feu embarcadero et avoir un tas de questions concernant FMX Grid. Pourriez-vous poster votre code pour styliser la Tcolumn? Merci John –

+0

Salut, je vais poster du code quand je reviens à l'ordinateur. Je dois dire cependant que la solution n'était pas si élégante à la fin. J'irais probablement pour le nouveau composant de table de TMS. Ma solution était buggée et pas facile à maintenir. –

Répondre

6

Si vous regardez les sources, TCheckColumn est seulement 15 lignes de code. Si vous avez besoin de créer votre propre classe de descendants, c'est assez simple. Ceci est une solution, sinon vous pouvez créer dynamiquement des composants dans vos cellules, puis lancer les enfants lors de la vérification des accessoires (TColumn.CellControlByRow() retourne un TControl et les enfants seraient ce que vous y avez mis).

Comme vous voulez «styler» votre rangée, je vous suggère d'écrire votre propre classe TColumn, même si vous pouvez faire de la peinture dans l'événement OnPaint.

+0

Salut merci pour votre réponse. Créer ma propre colonne semble faire l'affaire. Il ne sera bien sûr pas affiché dans l'éditeur de colonnes, mais je peux l'ajouter en utilisant tGrid.AddObject Maintenant que j'ai le contrôle de la colonne et des cellules, il semble plus facile de faire le reste. –

+2

Si quelqu'un est intéressé; J'ai résolu le style des cellules en remplaçant la procédure UpdateColumn de TColumn. Dans ce j'ai ajouté une fonction, similaire à GetValue, GetCellStyleLookup, Ceci est publié dans la grille, tout comme GetValue. Maintenant, je peux appliquer un style (créé avec l'éditeur de style) à n'importe quelle cellule basée sur le contenu virtuel. Je n'ai aucune idée si c'est la meilleure façon de le faire, mais ça fonctionne. et compte tenu de cette documentation clairsemée, je n'ai pas le temps de trouver autre chose. –