 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Raúl128 Invitado
|
Publicado: Lun 02 Dic, 2002 10:18 pm Asunto: Auto rellenar en una celda de un TstrinGrid (_Leo) |
|
|
Hola Colegas,
Me dirijo a todos y en especial a _Leo para ver si pueden ayudarme.
Necesito saber como puedo hacer para que al ir escribiendo en una celda de un TStringGrid, me vaya apareciendo el texto completo.
El texto que quiero que aparezca lo obtendre a traves de un componente TQuery.
Es algo parecido al autorrellenado de un ComboBox, solo que el combo obtiene el texto de la lista de dicho combo y en mi caso lo tengo que ir comparando con el resultado de mi consulta.
Se hacerlo para un Combo y se utilizan funciones como SelStart y SelLength pero en el Grid no tengo ni idea.
Alguien puede ayudarme??
Muchas gracias.
Raúl. |
|
| Volver arriba |
|
 |
Raúl128 Invitado
|
Publicado: Mie 04 Dic, 2002 1:48 am Asunto: |
|
|
Alguien por favor con alguna sugerencia...
Gracias. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 04 Dic, 2002 2:21 am Asunto: |
|
|
Hola Raúl:
Aquí va un ejemplo, apenas acabo de hacerlo y habría que probarlo un poco más. Espero que se entienda bien y te sirva como base para hacer lo que necesitas.
- Como ejemplo creamos un proyecto nuevo y añadimos un TStringGrid (StringGrid1).
- A continuación declaramos un TStringList (strList) como privado en la cabecera de la clase del Form y también añadimos la declaración del destructor:
| Código: | ...
private: // User declarations
TStringList *strList;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
__fastcall ~TForm1(); // Destructor
... |
- Añadimos el siguiente código al constructor y destructor del Form:
| Código: | __fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
// Permitimos que se pueda editar el StringGrid
StringGrid1->Options << goEditing;
// Lista de palabras a usar para autocompletar
strList = new TStringList;
strList->Add("Prueba");
strList->Add("Club Builder");
strList->Add("Leo");
strList->Sort();
}
//------------------------------------------------
__fastcall TForm1::~TForm1()
{
delete strList;
} |
- Y finalmente el siguiente código al evento OnKeyDown del StringGrid1:
| Código: | void __fastcall TForm1::StringGrid1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
Application->ProcessMessages();
if ( StringGrid1->EditorMode )
{
// Puntero al editor de la celda
TInplaceEdit *edit =
static_cast<TInplaceEdit*>(StringGrid1->Controls[0]);
String sBuscar = edit->Text;
if ( sBuscar.Length() && Shift == TShiftState()
&& Key != VK_BACK && Key != VK_DELETE )
{
int indice = -1;
// Buscar la cadena parcial en la lista
for (int i=0; i<strList->Count; i++)
if ( !CompareText(sBuscar,
strList->Strings[i].SubString(1, sBuscar.Length())) )
{
indice = i;
break;
}
// Si se encontro la cadena rellenamos la celda
if ( -1 != indice )
{
edit->Text = strList->Strings[indice];
edit->SelStart = sBuscar.Length();
edit->SelLength = edit->Text.Length() - sBuscar.Length();
}
}
}
} |
Ya me contaras que tal te va.
Saludos:
_Leo |
|
| Volver arriba |
|
 |
Raúl128 Invitado
|
Publicado: Mie 04 Dic, 2002 3:44 am Asunto: Mil gracias |
|
|
_Leo,
Estoy completamente agradecido con tu ayuda. Era la base que necesitaba para mi problema.
En ejemplo que agregaste, comparas con una lista, en mi caso yo lo tenia que comparar con el resultado de un TQuery. Solo utilice el método Locate para encontrar la cadena.
Lo he implementado con los cambios apropiados y me ha funcionado de maravilla.
Muchas Gracias.
Saludos desde Puebla, México |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|