Lenguaje de programación Borland Delphi
Os explicamos como mostrar en una columna de un un grid (DBGrid) de Delphi un check el valor de ésta.
Como es sabido, el DBGrid de Delphi 6 no permite por si solo mostrar casillas de verificación (checkbox) para los campos booleanos, sólo admite cambiarles el valor. Por ejemplo, permite mostrar si es True el valor del campo booleano un "Sí" ó un "No" si es False (en la propiedad del campo del componente TTable DisplayValues, poniendo como valor de esta propiedad "Sí;No").
Pero ¿hay alguna forma de mostrar un check o algún otro componente que se le parezca? Es posible utilizando la función del API de Windows DrawFrameControl.
Para poder mostrar una casilla de verificación la columna del DBGrid y el propio DBGrid deben cumplir una serie de requisitos:
* El DBGrid debe tener la propiedad ReadOnly a True.
* El DBGrid debe tener la propiedad Options - dgEditing a False.
* El Field (campo) del DBGrid debe tener la propiedad FieldName distinta de cualquier nombre de campo de la tabla, incluido el propio nombre del campo a cambiar. Por ejemplo, si el campo se llama en la tabla "cobrado", le podríamos poner como FieldName "cobrado_check".
Por último añadiremos el código fuente en el formulario Delphi necesario para que aparezca el check en el campo del grid. Utilizaremos el evento OnDrawColumnCell del DBGrid de Delphi:
procedure TFormFacturas.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
chequeado : Integer;
begin
if Column.FieldName = 'Cobrado_check' then
begin
DBGrid1.Canvas.FillRect(Rect);
chequeado := 0;
if md.tTablaFacturas['Cobrado'] then
chequeado := DFCS_CHECKED;
DrawFrameControl(DBGrid1.Canvas.Handle, Rect,
DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end
else
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Donde:
* "Cobrado": es el nombre de un campo booleano de la tabla "Facturas" que queremos mostrar con check.
¿Cómo funciona este procedimiento? busca una columna en el DBGrid con el nombre especificado, cuando la encuentra comprueba el valor del campo booleano, si es True mostrará una casilla de verificación chequeado y si no mostrará una casilla de verificación sin chequear, utilizando la función del API de Windows "DrawFrameControl".
Revisado por AjpdSoft el 04-03-2008.
AjpdSoft, todos los derechos reservados.
Publicado el: 2003-09-11