Página principal
Artículos y trucos
Catálogo de productos
Ejemplos y descargas
Mis libros
Cursos de formación
Investigación y desarrollo
Libros recomendados
Mis páginas favoritas
Acerca del autor
 
En colaboración con Amazon
 
Intuitive Sight

Check boxes en rejillas de datos

¿Quiere mostrar en una rejilla (DBGrid) el valor de una columna lógica utilizando una casilla de verificación (checkbox)? Es muy fácil lograrlo, si se trata de una rejilla sólo lectura. Asegúrese en primer lugar de que la rejilla tenga la propiedad ReadOnly a True, y que la opción dgEditing de Options esté inactiva. Utilizaremos como ejemplo la tabla vendors.db de dbdemos, que contiene un campo Preferred, de tipo lógico. Una vez que conecte esta tabla a una rejilla y haya creado columnas para todos los campos de la tabla, seleccione la columna del campo Preferred y limpie su propiedad FieldName. Seleccione nuevamente la rejilla y cree la siguiente respuesta para su evento OnDrawColumnCell:

procedure TForm1.DBGrid1DrawColumnCell(
   Sender: TObject; const Rect: TRect; DataCol: Integer; 
   Column: TColumn; State: TGridDrawState);
var
   Check: Integer;
begin
   if Column.FieldName = '' then
   begin
      DBGrid1.Canvas.FillRect(Rect);
      Check := 0;
      if Table1['PREFERRED'] then
         Check := DFCS_CHECKED;
      DrawFrameControl(DBGrid1.Canvas.Handle, Rect,
         DFC_BUTTON, DFCS_BUTTONCHECK or Check);
   end
   else
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

La función DrawFrameControl pertenece al API de Windows. Puede consultar la ayuda en línea para comprobar todas las posibilidades que ofrece dicha función.