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 

INSERTAR UN CheckBox EN UN StringGrid

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: INSERTAR UN CheckBox EN UN StringGrid Responder citando

muy buenos dias, a todos por favor me ayude, estoy haciendo un proyecto y necesito colocar un checkbox en un stringgrid,pero no deseo que este salga cuando le den click sobre el stringgrid sino que a medida que se añadan filas a mi stringgrid salga un checkbox agradeceria que me ayudaran or que he buscado y no he encontrado.... GRACIAS
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

[insertar checkbox en stringgrid]
https://cppbuilder.es/viewtopic.php?t=4853
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

gracias leo por tu respuestas, yo revice ese foro pero este link http://www.bridgespublishing.com/articles/issues/0010/More_string_grids.htm y el otro http://www.bridgespublishing.com/articles/source/October00Code.zip no funcionan ya y el otro no lo entiendo por favor te agradeceria que me regalaras un ejemplo... de antemano gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En el mismo enlace encontraras al final del todo las direcciones actualizadas.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

gracias Leo pero los ejemplos del link no los entiendo, por favor si me regalas un ejmplo comprendere mejor gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Me parece que el artículo está bastante claro, pero bueno, aquí va una versión algo mas resumida:



- Ponemos el siguiente código en el evento OnDrawCell del StringGrid:
(Se encarga de dibujar el CheckBox en la celda)
Código:
    TStringGrid* grid = static_cast<TStringGrid*>(Sender);

        // Si la celda contiene un CheckBox
    if (LOWORD(grid->Objects[ACol][ARow])) {
            // Borramos el contenido de la celda
        grid->Canvas->FillRect(Rect);

            // Obtenemos el estado del CheckBox
        UINT state = DFCS_BUTTONCHECK | DFCS_FLAT;
        state |= HIWORD(grid->Objects[ACol][ARow]) ? DFCS_CHECKED : 0;

            // Tamaño del CheckBox
        RECT rc = Rect;
        rc.right  = rc.left + GetSystemMetrics(SM_CXMENUCHECK);
        rc.bottom = rc.top  + GetSystemMetrics(SM_CYMENUCHECK);
        OffsetRect(&rc, 2, 3);

            // Dibujamos el CheckBox
        DrawFrameControl(grid->Canvas->Handle, &rc, DFC_BUTTON, state);

            // Recuadro del texto
        RECT rt = Rect;
        rt.left = rc.right + 2;
        rt.top += 2;

            // Dibujamos el texto
        const String text = grid->Cells[ACol][ARow];
        DrawText(grid->Canvas->Handle, text.c_str(), text.Length(),
            &rt, DT_LEFT | DT_SINGLELINE | DT_END_ELLIPSIS);
    }

- En el evento OnMouseDown del StringGrid:
(Detecta las pulsaciones sobre la celda para cambiar el estado del CheckBox)
Código:
    TStringGrid* grid = static_cast<TStringGrid*>(Sender);

        // Obtenemos la celda sobre la que se ha pulsado
    int ACol, ARow;
    grid->MouseToCell(X, Y, ACol, ARow);

        // Comprobamos si esa celda contiene un CheckBox
    if (ACol >= 0 && LOWORD(grid->Objects[ACol][ARow])) {
        TRect rc = grid->CellRect(ACol, ARow);
        rc.right  = rc.left + GetSystemMetrics(SM_CXMENUCHECK);
        rc.bottom = rc.top  + GetSystemMetrics(SM_CYMENUCHECK);
        OffsetRect(&rc, 2, 3);
            // En caso de pulsarse sobre el CheckBox cambiamos su estado
        if (PtInRect(&rc, Point(X, Y))) {
            bool checked = HIWORD(grid->Objects[ACol][ARow]);
            grid->Objects[ACol][ARow] = (TObject*)MAKELONG(true, !checked);
        }
    }

- Evento OnKeyPress del StringGrid:
(Detecta la pulsación de la barra espaciadora para cambiar el estado del CheckBox)
Código:
    TStringGrid* grid = static_cast<TStringGrid*>(Sender);

    if (Key == VK_SPACE) {
        const int ACol = grid->Col, ARow = grid->Row;
            // Si contiene un CheckBox cambiamos su estado
        if (LOWORD(grid->Objects[ACol][ARow])) {
            bool checked = HIWORD(grid->Objects[ACol][ARow]);
            grid->Objects[ACol][ARow] = (TObject*)MAKELONG(true, !checked);
        }
    }


Y después de incluir los eventos anteriores, si queremos añadir un CheckBox a una celda lo hacemos del siguiente modo:
Código:
int columna = 1, fila = 1;
    // El primer valor de MAKELONG indica si la celda contendrá un CheckBox,
    // y el segundo indica el valor del CheckBox:
StringGrid1->Objects[columna][fila] = (TObject*)MAKELONG(true, false);
Y para obtener el valor del CheckBox:
Código:
bool IsChecked = HIWORD(grid->Objects[columna][fila]);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: gracias Responder citando

BIen Leo gracias, ahora si entiendo, y es que con el tema por mas que desea no salia nada el tuyo esta mas corto y mejor explicado, gracias de nuevo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
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.