Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   buscar en un StringGrid (https://www.clubdelphi.com/foros/showthread.php?t=51146)

alexander_lv 06-12-2007 20:40:04

buscar en un StringGrid
 
estoy usando delphi7 y el componente StringGrid

tengo una lista de 1000 registros y aveces mas y aveces necesito ubicar informacion alli


como puedo ubicarme en una columna y escribir lo que necestio y que me lleve inmediatame hasta esa linea

Al González 06-12-2007 21:01:18

¡Hola!

Existen varias alternativas de solución. Eso que mencionas pertenece a un proceso conocido como "búsqueda incremental", el cual consiste en que un listado de información va enfocando el dato que más se asemeja a una cadena de caracteres que el usuario teclea.

Hay componentes rejilla (grid) de terceras partes muy buenos que tienen esa característica. Pero no sé si tú quieras implementarlo "a pie" con componentes nativos. Que yo sepa las rejillas nativas de Delphi (hasta la versión 7, cuando menos), no poseen esa capacidad nativamente integrada, mas sí puedes programarla con relativo esfuerzo.

Estamos en contacto.

Al González. :)

alexander_lv 06-12-2007 21:21:15

y que componente me recomiendas porque no pienzo gastar tiempo en algo que ya esta desarrollado

jhonny 06-12-2007 21:23:17

Acabo de construir este algoritmo que busca en un TStringGrid usando un TFindDialog llamado FindDialog1, el algoritmo es muy simple ya que solo busca lo que se necesita sin tener en cuenta las demas funciones marcadas por el usuario en el FindDialog en tiempo de ejecución (Como por ejemplo "Tener en cuenta las minusculas y las mayusculas", "Buscar para arriba o para abajo" y demas cosas), que seguro con este codigo podras comenzar y terminar para mostrarnos el resultado final :).

1) colocas un TFindDialog en el Form.

2) En un boton haces lo siguiente:

Código Delphi [-]
FindDialog1.Execute;

3) En el OnFind del TFindDialog haces lo siguiente:

Código Delphi [-]
var
  i, j :Integer;
  Siga :Boolean;
begin
  Siga := True;
  i := StringGrid1.Row;
  j := StringGrid1.Col+1;
  while (Siga) and (i <= StringGrid1.RowCount-1) do
  begin
    while (Siga) and (j <= StringGrid1.ColCount -1) do
    begin
      if AnsiContainsText(StringGrid1.Cells[j, i], FindDialog1.FindText) then
      begin
        StringGrid1.Col := j;
        StringGrid1.Row := i;
        Siga := False;
      end;
      inc(j);
    end;
    j := 0;
    inc(i);
  end;

Ese metodo te buscara el primero, que encuentre desde donde se encuentre el cursor (Celda seleccionada) en ese momento y si haces siguiente sobre el boton "siguiente" del FindDialog, pues te buscara el que sigue :D.

Espero te sirva :).

jhonny 06-12-2007 21:37:52

Cita:

Empezado por alexander_lv (Mensaje 251039)
y que componente me recomiendas porque no pienzo gastar tiempo en algo que ya esta desarrollado

En torry.net deben haber algunos de esos componentes ;).

alexander_lv 06-12-2007 21:38:50

muchas gracias ya implemente este codigo y me funciono perfecto

ademas tambien estube buscando y encontre uno que tiene muhcas funcionabilidades mas que ni te imaginas

se llama

AdvStringGrid

lo puedes encontrar aqui
http://www.tmssoftware.com/

lo malo es que vale mucho dinero, o no es mucho pero no lo tengo


La franja horaria es GMT +2. Ahora son las 11:53:24.

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