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.
|