Utilizamos cookies propias y de terceros. Al navegar entendemos que aceptas el uso de cookies. +Info.
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Usuario
· Wiki

Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Varios check en varias columnas del mismo DBGrid - Delphi
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Varios check en varias columnas del mismo DBGrid - Delphi

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Varios check en varias columnas del mismo DBGrid - Delphi Responder citando

He utilizado el truco Delphi:

http://www.ajpdsoft.com/modules.php?name=Content&pa=showpage&pid=5

para mostrar las celdas del grid que sean booleanas con un checkbox en vez de un texto (Sí/No).

Pero con este código no consigo ponerlas cuando son varias columnas (campos) en el mismo DBGrid, sólo me aparece una correctamente (la última):

Código:

procedure TFormContabilidad.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);

   if Column.FieldName = 'Entregado_check' then
   begin
      DBGrid1.Canvas.FillRect(Rect);
      chequeado := 0;
      if md.tTablaFacturas['Entregado'] then
         chequeado := DFCS_CHECKED;
      DrawFrameControl(DBGrid1.Canvas.Handle, Rect,
         DFC_BUTTON, DFCS_BUTTONCHECK or Check);
   end
   else
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


En este caso sólo me muestra el checkbox en la última columna (Entregado).

¿qué puedo estar haciendo mal?


Ultima edición por varios el Mar Mar 04, 2008 9:11 pm, editado 1 vez
MensajePublicado:
Mar Mar 04, 2008 9:09 pm
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Varios check en varias columnas del mismo DBGrid - Delph Responder citando



Anuncios



Otra cuestión, con el código anterior los checkbox me aparecen muy grandes y estéticamente no se ven bien ¿hay alguna forma de quitarles el efecto 3D o al menos reducirles el tamaño?
MensajePublicado:
Mar Mar 04, 2008 9:10 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Varios check en varias columnas del mismo DBGrid - Delph Responder citando



Anuncios



Cita:
Otra cuestión, con el código anterior los checkbox me aparecen muy grandes y estéticamente no se ven bien ¿hay alguna forma de quitarles el efecto 3D o al menos reducirles el tamaño?


Efectivamente, lo hemos probado y falla, para solucionarlo y salir del paso prueba esto otro, donde también actualizamos el código para que el checkbox sea más pequeño:

Código:

procedure TFormFacturas.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
   Check: Integer;
   recuadroCheck: TRect;
   recuadroCheck2: TRect;
begin
   if Column.FieldName = 'Cobrado_check' then
   begin
      DBGrid1.Canvas.FillRect(Rect);
      Check := 0;
      if md.tTablaFacturas['Cobrado'] then
         Check := DFCS_CHECKED;
      recuadroCheck := Rect;
      InflateRect(recuadroCheck, -2, -2);
      DrawFrameControl(DBGrid1.Canvas.Handle, recuadroCheck,
         DFC_BUTTON, DFCS_BUTTONCHECK or Check);
   end
   else
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

   if Column.FieldName = 'Entregado_check' then
   begin
      DBGrid1.Canvas.FillRect(Rect);
      Check := 0;
      if md.tTablaFacturas['Entregado'] then
         Check := DFCS_CHECKED;
      recuadroCheck2 := Rect;
      InflateRect(recuadroCheck2, -2, -2);
      DrawFrameControl(DBGrid1.Canvas.Handle, recuadroCheck2,
         DFC_BUTTON, DFCS_BUTTONCHECK or Check);
   end
   else
      DBGrid1.DefaultDrawColumnCell(recuadroCheck2, DataCol, Column, State);
end;
MensajePublicado:
Mar Mar 04, 2008 9:26 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A