Ver Mensaje Individual
  #3  
Antiguo 29-03-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 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