Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DBgrid con checks como ? (https://www.clubdelphi.com/foros/showthread.php?t=27899)

Coco_jac 02-12-2005 18:36:13

DBgrid con checks como ?
 
Hola amigos del foro como podria mostrar check en una columna del DBGrid de manera que podria activarlo o no..........
Acabo e ver post relacionados , pero a diferencia de esto no tengo campos booleanos , sino que deseo tener check en una columna de manera que al seleccionrlos me permitiria borrar el registro o registros, se que e puede hacer de otra manara mas facil pero me lo solicitan asi.

Espero sus comentarios...........

Delfino 02-12-2005 19:32:58

intenta esto, teniendo una imagelist con dos bitmaps, una para el estado cheked y otra para el unchecked, el evento es el OnDrawColumnCell:

Código:

  if Column.Field = campo then
  begin
    DBGrid1.Canvas.FillRect(Rect);
    if campo.value = 0 then //unchecked condition
      ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,0)
    else  //checked condition
      ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,1);
  end;


Casimiro Notevi 02-12-2005 19:55:22

Añade un campo calculado y que sea éste el que conviertas en un checkbox, como te indica Delfino

el_barto 02-12-2005 21:02:08

Usalo
 
este problema me aquejo hace ya un tiempo, y esta explicado aqui:

http://www.clubdelphi.com/foros/show...t=dbgrid+check

ademas agregaria esto :

dbgrid1.SelectedIndex:=cualquiera;

para que el efecto del click sea mas original aun.

amadis 27-04-2012 00:31:00

alguien probo con lo de los bitmaps?
 
Alguien probò esto de los bitmaps?

Parece simple y muy estetico pero no pude hacerlo funcionar.

Código Delphi [-]
 if Column.Field = campo then
  begin
    DBGrid1.Canvas.FillRect(Rect);
    if campo.value = 0 then //unchecked condition
      ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,0)
    else  //checked condition
      ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,1);
  end;

amadis 04-05-2012 02:20:04

nadie?
 
Nadie lo ha probado?

Neftali no estas por ahi con tu sabidurìa como para dar opinión al respecto?

Saludos a todos

Casimiro Notevi 04-05-2012 02:27:34

¿Te refieres a pintar los checkbox cargando una pequeña imagen?. sí, es algo habitual, lo hago normalmente así:

Código Delphi [-]
procedure TFempresas.grUsuaDrawColumnCell(Sender: TObject; const Rect: TRect; 
  DataCol: Integer; Column: TColumn; State: TGridDrawState); 
begin   // pintar los checkbox 
  if AnsiLowerCase(Column.Field.FieldName) = _acceso_ then 
  begin 
    (Sender As TDBGrid).Canvas.FillRect( Rect ); 
    imglst2.Draw((Sender As TDBGrid).Canvas,Rect.Left+10,Rect.Top+1,0); 
    if Column.Field.Value=1 then 
      imglst2.Draw((Sender As TDBGrid).Canvas,Rect.Left+10,Rect.Top+1,2) 
    else 
      imglst2.Draw((Sender As TDBGrid).Canvas,Rect.Left+10,Rect.Top+1,0{1});  // 0.en blanco 1.no 2.si 
  end;
end;

ecfisa 04-05-2012 04:20:48

Hola.

Yo utilizo algo parecido a:
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  B: TBitmap;
  R: TRect;
begin
  if Column.FieldName = 'CampoDelBitmap' then
  begin
    TDBGrid(Sender).Canvas.FillRect(Rect);
    B:= TBitmap.Create;
    try
      ImageList1.GetBitMap(TDBGrid(Sender).DataSource.DataSet.FieldByName('Opcion').AsInteger + 1, B); 
      B.Width:= Rect.Right - Rect.Left;
      B.Height:=Rect.Bottom - Rect.Top;
      DBGrid1.Canvas.StretchDraw(Rect, B);
    finally
      B.Free;
    end;
    R:= Rect;
    R.Left := R.Left + R.Bottom - R.Top;
    DBGrid1.DefaultDrawColumnCell(R, DataCol, Column, State);
  end;
end;
Permite el usar varias imágenes para distintos valores, pero el código de Casimiro realmente es mucho más simple... (y ya me lo copié :))

Saludos.

Casimiro Notevi 04-05-2012 10:16:26

Cita:

Empezado por ecfisa (Mensaje 431735)
(y ya me lo copié :))

¿Y mis derechos de autor?, espera que recuerde... ah, no, si yo también lo copié :D

olbeup 04-05-2012 13:35:52

Yo también lo hacia cómo ecfisa pero el tuyo casimiro notevi, es más corto y no hay que crear ni destruir ningún Objecto, no te acostaras sin saber algo más.

Perdón pero yo también me lo he copiado. :D:D

Un saludo.

Casimiro Notevi 04-05-2012 13:40:25

Cita:

Empezado por olbeup (Mensaje 431752)
Perdón pero yo también me lo he copiado.

¡Copiad, malditos! :)

amadis 04-05-2012 15:23:42

Justamente buscaba lograr eso...

Copio a casimiro.


La franja horaria es GMT +2. Ahora son las 03:45:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi