Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Auto rellenar en una celda de un TstrinGrid (_Leo)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Auto rellenar en una celda de un TstrinGrid (_Leo) Responder citando

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
Mensaje    Asunto: Responder citando

Alguien por favor con alguna sugerencia...

Gracias.
Volver arriba
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Mil gracias Responder citando

_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
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.