Cita:
Empezado por eennzzoo
[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 ?