par , 29/01/2019 à 12h09 (1306 Affichages)
Le composant TListView offre une possibilité intéressante : l'adjonction d'une boite de recherche en activant la propriété SearchVisible
Malheureusement, à la conception d'un écran windows sans style particulier cette boite peut sembler riquiqui (hauteur par défaut d'un TEdit) par rapport aux éléments affichés
Ma première approche à ce petit (c'est le cas de le dire) problème a été de me pencher sur la partie style mais, j'ai eu beau fouiller : pas d'objet correspondant !
En fait, le style d'une boite de recherche n'est que celui d'un TEdit
Donc une démarche possible est de créer un style personnalisé de TEdit et de l'appliquer.
Facile à dire mais pour l'appliquer il faut accéder à une variable privée du composant TListView : FSearchEdit.
Il faut donc, en plus de créer un style personnalisé créer un Helper pour accéder à cette propriété !
THackListView = Class(TListViewBase);
et l'utiliser ainsi :
THackListView(ListView1).FSearchEdit.StyleLookup := 'monSearchStyle';
Bref, beaucoup d'étapes pour une modification "esthétique".
Autre solution qui n'implique pas les styles ni de "hacking" : accéder à la boite de recherche directement.
Au préalable, ajouter FMX.SearchBox dans la liste des uses.
1 2 3 4 5 6
| if ListView1.controls[1].ClassType = TSearchBox then
begin
// hauteur
if TSearchBox(ListView1.controls[1]).Height<30 then // certains styles ou cibles proposent une hauteur plus importante
TSearchBox(ListView1.controls[1]).Height:=30;
end; |
Pourquoi l'indice 1 ? J'ai pu remarquer après différents tests qu'il s'agissait toujours de cet élément, peut-être est-ce dut à la propriété SearchAlwaysOnTop
par précaution on pourrait utiliser ce code
1 2 3 4 5 6 7 8 9 10
| var AControl : TControl;
begin
...
For AControl in ListView1.Controls do
if AControl.ClassType= TSearchBox then
begin
if TSearchBox(Acontrol).Height<30 then
TSearchBox(Acontrol).Height:=30;
Break;
end; |
Cerise sur le gâteau, il est possible d'accéder à d'autres propriétés comme la couleur de la police
1 2 3
| // couleur du texte
TSearchBox(ListView1.controls[1]).StyledSettings:=TSearchBox(ListView1.controls[1]).StyledSettings - [TStyledSetting.FontColor];
TSearchBox(ListView1.controls[1]).TextSettings.FontColor:=TalphaColors.Red; |
ou le texte indicatif
TSearchBox(ListView1.controls[1]).TextPrompt:='Rechercher';