Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-03-2014
Avatar de eennzzoo
eennzzoo eennzzoo is offline
Miembro
NULL
 
Registrado: nov 2013
Ubicación: Argentina
Posts: 59
Poder: 13
eennzzoo Va por buen camino
Busquedad en un StringGrid

Hola, tengo un StringGrid que se carga con un archivo. Con el siguiente codigo busco la palabra que quiero y me lo marca con color a la celda. Lo que yo quisiera es que a medida que voy escribiendo la palabra en el edit me vaya listando las palabras que empiezan con lo que estoy escribiendo. Si en el StringGrid tengo:
Lunes
Martes
Miercoles
Jueves

Y si yo en el edit escribo la M quiero que solo me muestre las palabras que empiezan con M y no las otras.

Código:
void __fastcall TfPeliculas::btnBuscarClick(TObject *Sender)
{
        for(int i = StringGrid1->FixedRows; i < StringGrid1->RowCount ; i++)
                if((StringGrid1->Cells[0][i] == editPelicula->Text)||(LowerCase(StringGrid1->Cells[0][i]) == editPelicula->Text)) {
                    TRect Casilla;
                    StringGrid1->Canvas->Brush->Color=static_cast<TColor>(RGB(252, 210, 147));
                    Casilla= StringGrid1->CellRect(0, i);
                    StringGrid1->Canvas->FillRect(Casilla);
                    StringGrid1->Canvas->TextOut(Casilla.Left+1,Casilla.top+1,StringGrid1->Cells[0][i]);
                }

}
Gracias
__________________
https://www.facebook.com/riverplateoficial
Responder Con Cita
  #2  
Antiguo 29-03-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
para eso casi mejor usar algo como sqlite o mysql ya que estossi te permiten usar consultas, aplicar filtros y mucho mas. De todos modos podrias usar dos stringgrid e vez de uno y en el que creas como auxilar y que no será visible es en el que guardarás todo y en el que está visible lo rellenas usando los datos del que está oculto.
Responder Con Cita
  #3  
Antiguo 29-03-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por eennzzoo Ver Mensaje
[b]..._
Lo que yo quisiera es que a medida que voy escribiendo la palabra en el edit me vaya listando las palabras que empiezan con lo que estoy escribiendo. Si en el StringGrid tengo:
Lunes
Martes
Miercoles
Jueves

Y si yo en el edit escribo la M quiero que solo me muestre las palabras que empiezan con M y no las otras.
Hola eennzzoo.

No existe una propiedad tal como Visible para las filas de un TStringGrid.
Lo único que se me ocurre en este momento para hacer lo que buscas, es usar la propiedad RowHeights[n] para darle alto cero a aquellas filas que no tienen coincidencia con lo que llevas ingresado en el TEdit. El filtro se anula si dejas la propiedad Text del Edit igual a cadena vacía.

Ejemplo:
Código:
...
#define INDEX_COL 0

int OldRowHeight;

// Cargar datos al StringGrid
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  TStrings *TS = new TStringList;

  // leer archivo de prueba
  TS->LoadFromFile(ExtractFilePath(Application->ExeName) + "archivo.txt");
  // Ajustar StringGrid
  StringGrid1->FixedRows= 1;
  StringGrid1->FixedCols= 0;
  // fijar número de filas
  StringGrid1->RowCount=TS->Count-1;
  // fijar número de columnas
  TStrings *aux = new TStringList;
  StringGrid1->ColCount= ExtractStrings(TSysCharSet()<< ',',
    TSysCharSet() << '\0', TS->Strings[0].c_str(),aux);
  delete aux;
  // obtener alto de celda predeterminado
  OldRowHeight = StringGrid1->DefaultRowHeight;
  // pasar a StringGrid
  for(int lin=0; lin<TS->Count; lin++)
    StringGrid1->Rows[StringGrid1->FixedRows+lin]->CommaText= TS->Strings[lin];

  delete TS;
}

// Mostrar sólo las filas cuya columna índice tenga los caracteres ingresados
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
  TStringGrid *SG = StringGrid1;

  for(int f=SG->FixedRows; f<SG->RowCount; f++)
    if(UpperCase(SG->Cells[INDEX_COL][f].SubString(1,Edit1->Text.Length()))
          == UpperCase(Edit1->Text))
      SG->RowHeights[f]= OldRowHeight;
    else  
      SG->RowHeights[f]= 0;
}
Toma en cuenta que es un ejemplo... El archivo "archivo.txt" que usé para el código, contiene datos separados por comas para simplificar la carga. Seguramente tengas que reformular esa parte del código para adecuarlo a la organización de tus datos.
INDEX_COL brinda el índice de la columna sobre la cuál se realizará la búsqueda.
Cualquier dificultad avisame y te adjunto el código fuente.

Como sugerencia, es muchísimo mas simple y eficiente realizar esta taréa (y muchas otras) sobre un TDBGrid usando una tabla de una base de datos.

Saludos

Pd: Una consulta, ¿ Tenes dificultad para visualizar los mensajes que los escribis todos en negrita ?
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 31-03-2014
Avatar de eennzzoo
eennzzoo eennzzoo is offline
Miembro
NULL
 
Registrado: nov 2013
Ubicación: Argentina
Posts: 59
Poder: 13
eennzzoo Va por buen camino
Gracias ahi lo probe y anda.
__________________
https://www.facebook.com/riverplateoficial
Responder Con Cita
Respuesta



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
Busquedad en un listview eennzzoo C++ Builder 9 16-03-2014 18:32:21
Busquedad en un txt eennzzoo C++ Builder 7 14-03-2014 17:06:15
Stringgrid Pollo2004 Varios 7 31-10-2008 01:21:13
stringgrid en celda de otro stringgrid?? noodle_ OOP 3 17-06-2008 13:36:01
StringGrid giank_s OOP 3 02-12-2004 14:58:29


La franja horaria es GMT +2. Ahora son las 07:46:42.


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