Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   checkbox asociados a grillas (https://www.clubdelphi.com/foros/showthread.php?t=5083)

pruz 07-11-2003 18:08:57

checkbox asociados a grillas
 
hola amigos,
necesito un componente free u otro que me permita seleccionar en una grilla un checkbox..

saludos

__cadetill 07-11-2003 18:21:22

si quieres programarlo tu, en mi web tienes una demo del componente TRxDbGrid donde muestro cómo hacer eso.

Si quieres un componente ya hecho, puedes mirar en Torrys, hay varios. Yo te puedo aconsejar el TopGrid de objectsight. Es muy bueno y completo

pruz 07-11-2003 18:57:46

Vi tu pagina y baje el fuente pero no me deja chekear el check,

en cuanto a los de torry son trial, y yo busco un gratis

gracias

marcoszorrilla 07-11-2003 19:13:41

Yo lo hago en el mismo DbGrid de Delphi, a la noche si llego pronto, pongo el código a continuación de este hilo, me baso en un ejemplo de Marco Cantù.

Un Saludo.

pruz 07-11-2003 19:24:41

Muchas gracias, esperare tu codigo

Saludos,

__cadetill 07-11-2003 21:36:57

Cita:

pruz comentó:
Vi tu pagina y baje el fuente pero no me deja chekear el check,
Cierto, la demo de la web es de sólo lectura. Pero para modificarlo, sólo tendrías que, por ejemplo, controlar el clic o el doble clic en el componente

marcoszorrilla 07-11-2003 22:30:36

No es que sea muy pronto, se me ha caido una Novell y vengo un poco cansado pero ahí va lo prometido:

DbChkSumar, es un DbCheckBox que está vinculado al campo Tipo booleano
que queremos controlar desde la rejilla, en este caso se trata de
marcar que líneas de la factura queremos que se sumen.

GrLineas, es el nombre que le he dado a la rejilla

Código:

procedure TfrFacturas.GrLineasColEnter(Sender: TObject);
begin
  if GrLineas.Columns [GrLineas.SelectedIndex].
      Field = DmLux.LinfactSumar  then
    DbChkSumar.Visible := True
  else
    DbChkSumar.Visible := False;
end;


procedure TfrFacturas.GrLineasDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if (gdFocused in State) and
    (Column.Field = DmLux.LinfactSumar) then
  begin
    DbchkSumar.SetBounds (
      Rect.Left + grLineas.Left + 1,
      Rect.Top + grLineas.Top + 1,
      Rect.Right - Rect.Left,
      Rect.Bottom - Rect.Top);
  end;
end;

procedure TfrFacturas.GrLineasKeyPress(Sender: TObject; var Key: Char);
begin
  if DbChkSumar.Visible and (Ord (Key) > 31) then
  begin
    Key := #0;
    DmLux.Linfact.Edit;
    DbChkSumar.Checked := not
      DbChkSumar.Checked;
    DbChkSumar.Field.AsBoolean :=
      DbChkSumar.Checked;
  end;

Un Saludo.

Descendents 08-11-2003 03:03:04

Con tu Permiso MarcosZorrilla, pongo lo que yo utilizo,reciclado de tu código.

Al Grid,al campo booleano,se le pone el readonly a true, si no al modificarlo por teclado daria error.

ADOTable1:Tabla
trastero:Campo boleano
Grlineas:Grid
DbChkSumarClick:Tcheckbox;

Código:

procedure TForm1.GrLineasColEnter(Sender: TObject);
begin
  if GrLineas.Columns [GrLineas.SelectedIndex].
      Field = ADOTable1trastero then
    DbChkSumar.Visible := True
  else
    DbChkSumar.Visible := false;

end;

procedure TForm1.GrLineasDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 if (gdFocused in State) and
    (Column.Field = ADOTable1trastero) then
  begin
    DbchkSumar.SetBounds (
      Rect.Left + grLineas.Left + 1,
      Rect.Top + grLineas.Top + 1,
      Rect.Right - Rect.Left,
      Rect.Bottom - Rect.Top);
      dbchksumar.Checked := ADOTable1Trastero.value;
  end;
end;

procedure TForm1.DbChkSumarClick(Sender: TObject);
begin
    ADOTable1.edit;
    ADOTable1Trastero.value := DbChkSumar.Checked;
    adotable1.post;
  end;

procedure TForm1.GrLineasKeyPress(Sender: TObject; var Key: Char);
begin
 if dbchksumar.visible then begin
      if dbchksumar.Checked = true then begin
        dbchksumar.Checked := false;
        dbchksumarclick(nil);
        exit;
      end;
      if dbchksumar.Checked = false then begin
        dbchksumar.Checked := true;
        dbchksumarclick(nil);
        exit;
      end;

 end;
end;

De esta manera al moverme a través de los registros, se me refresca el checkbox.
Se puede modificar el checbox apretando cualquier tecla, o con el click.
Si se quiere una tecla determinada, se hace un filtro if Key tal etc...

Un saludo

marcoszorrilla 08-11-2003 13:04:06

Aunque probablemente se deduzca de mi código, se me olvidó decir que el DbCheckBox, lo pongo sobre la barra de títulos de la rejilla con la propiedad visible a falso, para que aparezca y se dibuje en el registro que estamos editando en ese momento.

En cuanto a las modificaciones propuestas por el amigo Descendents, me parece muy bien, pues lo bonito de un hilo es que haya continuidad y que cada uno aporte distintos puntos de vista y soluciones, de esta manera no solamente se contesta al que pregunta, sino que se ilustra a quien solamente lea el tema por curiosidad.

Un Saludo.


La franja horaria es GMT +2. Ahora son las 06:27:44.

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