Ver Mensaje Individual
  #1  
Antiguo 30-06-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - Espańa
Posts: 18.281
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Checkbox en un TDBGrid

ż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:

Código Delphi [-]
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.
Responder Con Cita