Bonjour,
Conscient de la critique de Gilles à propos des grilles FMX et comme j'étais sur ma lancée
- https://www.developpez.net/forums/d2...presse-papier/
- https://www.developpez.net/forums/d2...mx-selections/
, je me suis un peu plus penché sur la question.
L'objectif, comment modifier l'entête des colonnes de grille sans pour autant créer un style personnalisé ce qui est souvent rébarbatif.
Donc, contrairement à ce que j'ai pu initier en 2019 https://www.developpez.net/forums/d1...omiser-grille/ , et reporter dans un billet de mon blog
j'entame une démarche par code
Vous ne le saviez peut-être pas, mais il est tout à fait possible :
- de modifier la hauteur du titre ;
- de modifier sa présentation ;
- d'ajouter des composants à un entête de colonne.
Partant de ce principe, je commence à obtenir des résultats
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 /// Changement de hauteur procedure TForm131.btnHeaderSizeClick(Sender: TObject); var Header: THeader; begin Header:= THeader(StringGrid1.FindStyleResource('header')); Header.Height := 40; end;et enfin ajout d'image (ici un tpath)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 /// Changement de présentation (globale) procedure TForm131.StringGrid1ApplyStyleLookup(Sender: TObject); var Header: THeader; HeaderItem: THeaderItem; I: Integer; begin Header:= THeader((Sender as TStringGrid).FindStyleResource('header')); if Assigned(Header) then begin for I := 0 to pred(Header.Count) do begin HeaderItem:= Header.Items[I]; HeaderItem.StyledSettings := HeaderItem.StyledSettings - [TStyledSetting.Size, TStyledSetting.FontColor]; HeaderItem.Font.Size := 20; HeaderItem.FontColor:= TAlphaColors.Blue; HeaderItem.TextSettings.HorzAlign := TTextAlign.Center; HeaderItem.TextSettings.VertAlign := TTextAlign.Center; end; Header.Height := 32; end; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 procedure TForm131.btnAddPathClick(Sender: TObject); var Header: THeader; HeaderItem: THeaderItem; begin Header:= THeader(StringGrid1.FindStyleResource('header')); if assigned(Header) then HeaderItem:= Header.Items[0]; with Tpath.Create(HeaderItem) do begin Align:=TalignLayout.Right; Parent:=HeaderItem; HeaderItem.TextSettings.HorzAlign := TTextAlign.Leading; Data.Data:='M3 13H15V11H3M3 6V8H21V6M3 18H9V16H3V18M22.54 16.88L20.41 19L22.54 21.12'+ 'L21.12 22.54L19 20.41L16.88 22.54L15.47 21.12L17.59 19L15.47 16.88'+ 'L16.88 15.47L19 17.59L21.12 15.46L22.54 16.88'; Width:=Header.Height; OnClick:=ClickSort; end; end;
en encadré, ce que j'envisage comme présentation de la partie tri (j'ai opté pour un GridPanelLayout contenant un label pour l'ordre de tri et 3 TPath, l'événement à gérer sera le onclick du GridPanelLayout)
Pour aller plus loin et rendre les choses plus faciles je me suis même mis en tête de créer un Helper (ma marotte du moment)
Voilà (enfin) ma question, il va me falloir accéder à des propriétés (ce qu'un helper ne permet pas), évènements et fonctions spécifiques, pour ne pas avoir à modifier le composant, je songeais utiliser le tagobject de chaque colonne avant de me lancer dans cette aventure, est-ce possible ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 TColumnHelpers = Class helper for TCustomGrid public procedure SetAColumnAsSortable(const Column : TColumn; const HeaderHeight : Single =0 ); function IsColumnSortable(const Column : TColumn) : Boolean; end;
Partager