Hola a todos los colegas y entusiastas de Delphi!
El día de hoy les comparto este truco que si bien no es nuevo, nos puede ayudar a usar nuestros propios "buscadores" personalizados cuando tenemos datos en un TListView evitando así el buscador por defecto que viene en el componente que si bien es de gran ayuda... se mira algo feo con ese tono gris cuando quizás nuestra app maneja otras paletas de colores...
En primera debemos declarar un SearchBox de manera pública o privada según el uso de nuestra app como se muestra a continuación:
Código Delphi
[-]procedure TMainForm.FormCreate(Sender: TObject);
begin
SearchBox:= TSearchBox.Create(Self);
SearchBox.Parent:= Self;
SearchBox.Align:= TAlignLayout.None;
SearchBox.Visible:= False;
setSearchBox;
end;
Código Delphi
[-]procedure setSearchBox;
var
i: integer;
begin
ListView.SearchVisible:= True;
for i:= 0 to ListView.ControlsCount - 1 do
begin
if ListView.Controls[i].ClassType = TSearchBox then
begin
SearchBox.Model.SearchResponder:=
TSearchBox(ListView.Controls[i]).Model.SearchResponder;
Break;
end;
end;
ListView.SearchVisible:= False;
end;
Código Delphi
[-]procedure TMainForm.EdtSearchChangeTracking(Sender: TObject);
begin
if Assigned(SearchBox) then
begin
SearchBox.Text:= TEdit(Sender).Text;
end;
end;
Al momento de mostrarle al usuario datos provenientes de una BD, un WebService, este truco nos ahorraría el trabajo de mostrarlos en otro componente y escribir el respectivo algoritmo de búsqueda... aprovechando también que el TListView está más optimizado que el TListBox!.
Aquí les dejo un Link a un repositorio en GitHub que muestra el funcionamiento del truco el cual está escrito en Delphi 11.3 y hace uso de Skia:
https://github.com/dani36652/Delphi-...earchResponder