| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
rafaelr Cdt

Registrado: 05 Ago 2008Mensajes: 15
|
Publicado: Vie 30 Ene, 2009 4:46 pm Asunto: INSERTAR UN CheckBox EN UN StringGrid |
|
|
| 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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
|
| Volver arriba |
|
 |
rafaelr Cdt

Registrado: 05 Ago 2008Mensajes: 15
|
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 31 Ene, 2009 12:53 am Asunto: |
|
|
| En el mismo enlace encontraras al final del todo las direcciones actualizadas. |
|
| Volver arriba |
|
 |
rafaelr Cdt

Registrado: 05 Ago 2008Mensajes: 15
|
Publicado: Sab 31 Ene, 2009 2:43 am Asunto: |
|
|
| gracias Leo pero los ejemplos del link no los entiendo, por favor si me regalas un ejmplo comprendere mejor gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 01 Feb, 2009 7:20 pm Asunto: |
|
|
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 |
|
 |
rafaelr Cdt

Registrado: 05 Ago 2008Mensajes: 15
|
Publicado: Lun 02 Feb, 2009 8:42 pm Asunto: gracias |
|
|
| 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 |
|
 |
|