Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2024
dani36652 dani36652 is offline
Miembro
 
Registrado: abr 2019
Posts: 61
Poder: 6
dani36652 Va camino a la fama
Lightbulb Delphi FMX: Busqueda con un campo de texto personalizado en un TListView

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
   //Se crea en el evento OnCreate del form principal o donde les sea más conveniente
  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
   // Asignar la referencia del SearchBox del TListView en uso al que acabamos de crear para manipularlo después
  //ListView SearchVBox is only available if ListView.SearchVisible is True
  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
  // y finalmente en el evento OnChangeTracking de nuestro TEdit de búsqueda le pasamos el texto que se escriba al SearchBox creado anteriormente
  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
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Buscar texto en un campo con Delphi e IBConsole Juan Espinoza A Varios 1 26-04-2011 19:07:58
campo memo de access personalizado pabloloustau Varios 1 21-01-2010 17:52:51
Establecer características de texto en cabecera de un TListView Ictiandro OOP 6 17-08-2006 18:43:08
Problema con Busqueda sobre campo de texto tin Firebird e Interbase 5 29-06-2004 10:18:29
TListView con varias lineas de texto Novás Varios 0 04-05-2004 21:20:09


La franja horaria es GMT +2. Ahora son las 00:51:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi