Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-06-2012
Jetzuvely21 Jetzuvely21 is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 22
Poder: 0
Jetzuvely21 Va por buen camino
Campos booleanos en StringGrid con CheckBox

¡Hola de nuevo Delphinianos ...!

El motivo por el cual escribo, esque pretendo realizar la lectura de campos booleanos de una BD (SQL Server) y mostrarlos dependiendo su valor (True/False) en un StringGrid pintando un CheckBox que describa este status (Seleccionado/NoSeleccionado) respectivamente.

He revisado ya algunos hilos entre ellos http://delphi.about.com/od/usedbvcl/l/aa082003a.htm y algunos hilos de este foro.Y he tomado algunas de las funcionalidades para pintar el checkbox, pero en una sola columna.Estoy en Delphi5.

Lo que hasta ahorita llevo es cargar los valores de la tabla en el StrinGrid.Algunos de mis campos que son los booleanos me aparecen True/False en el StringGrid.

Intenté crear un componente TCheckBox y asiganarlo de esta forma
Código Delphi [-]
  
...
  StringGrid1.Objects[5,i] := NewCheckBox;  
  if (StringGrid1.Cells[5,i]='True') then     
    NewCheckBox.Checked :=true   
  else     
    NewCheckBox.Checked :=false;   
end;

El valor del campo asignado al StringGrid al debuguear si me lo está leyendo bien y entra a la condición true/false que corresponde pero ya cuando visualizo el resultado,el checkbox siempre aparece marcado.



¿Alguna sugerencia para poder visualizar este tipo de campos, de esta manera? o ¿Algún tip? Se agradece.

Gracias por el interés, saluditos!
__________________
"El mejor alimento del alma, es la inspiración de uno mismo.."

Última edición por ecfisa fecha: 23-06-2012 a las 01:39:56. Razón: corregir problema etiquetas interfaz mejorada
Responder Con Cita
  #2  
Antiguo 23-06-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Hola.

Echale un vistazo a este hilo a ver si te ayuda.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 25-06-2012
Jetzuvely21 Jetzuvely21 is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 22
Poder: 0
Jetzuvely21 Va por buen camino
Gracias!!

Hola, te agradezco tu atención e interés, ya eché un vistazo en el link y si me sirvió de algo. Ya me aparecen los checks marcados conforme a los datos de la BD.

Pero ahora tengo otra situacíon. ¿Cómo puedo trabajar con los eventos de los ChecksBox creados? Sin necesidad de vincular este control a un CheckBox ya existente.Me interesa, el OnClick. Porque creeé los checks por código...:S

Creé el procedure, pero no me funciona.
Código Delphi [-]
procedure TForm1.NewCheckBoxClick(Sender: TObject);
begin
showMessage('hola');
end;

Saludos!

P.D. Estoy investigando por si encuentro alguna otra alternativa.

Gracias!
__________________
"El mejor alimento del alma, es la inspiración de uno mismo.."
Responder Con Cita
  #4  
Antiguo 26-06-2012
Jetzuvely21 Jetzuvely21 is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 22
Poder: 0
Jetzuvely21 Va por buen camino
Hola de nuevo...

Bueno, he estado modificando mi codigo, para lograr lo que me he propuesto. Simulé la lectura de los campos booleanos de mi tabla al StringGrid con valores fijos, ya que esto ya lo he logrado.

*En el evento Create del Formulario es donde se realiza todo el proceso.
*En el evento Clic del StringGrid eh puesto validaciones dependiendo del "status" del campo (True/False).Al darle Click "modifica" el valor del StringGrid si está en True lo pone en False, si está en False, lo pone en True.

Pero es aqui donde me he perdido un poco en cuanto a referenciar al Check que va a cambiar de status, ya que siempre me cambia el status del ultimo check .

No sé como hacer para que el check respectivo cambie su status al dar dblclick.

Lo que llevo hasta el momento es esto:
Código Delphi [-]
unit UPrueba3;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids, ExtCtrls;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure ClickLabels(Sender :TObject);
    procedure StringGrid1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  NewCheckBox: TCheckBox;
implementation

{$R *.DFM}


procedure TForm1.ClickLabels(Sender: TObject);
var
vfila: Integer;
begin
{with Sender as TCheckBox do
  begin
   ShowMessage(Caption);
   case Tag of
    1: ShowMessage('Accion especial para el primer ');
    2: ShowMessage('Accion especial para el segundo');

   end;
end;}
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
var
  pt: TPoint;
  grid: TStringgrid;
  aCol, aRow: Integer;
begin
   GetCursorPos( pt );
   grid := Sender As TStringgrid;
   pt:= grid.ScreenToClient( pt );
   grid.MouseToCell( pt.x, pt.y, aCol, aRow );

  if (StringGrid1.Cells[ACol,ARow])= 'True' then
  begin
      StringGrid1.Cells[ACol,ARow] := 'False';
      NewCheckBox.Checked := False;
  end
  else
  begin
    if (StringGrid1.Cells[ACol,ARow])= 'False' then
    begin
     NewCheckBox.Checked := True;
     StringGrid1.Cells[ACol,ARow] := 'True';
     end;
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
 i,j: Integer;
 Rect: TRect;
 cant,aTop: integer;
begin
  StringGrid1.Cells[1,1] := 'True';
  StringGrid1.Cells[1,2] := 'False';
  StringGrid1.Cells[1,3] := 'False';
  StringGrid1.Cells[1,4] := 'True';

  aTop := 0;
  cant := 0;
  for i :=0  to stringgrid1.RowCount-1 do
  begin
    NewCheckBox := TCheckBox.Create(Application);
    NewCheckBox.Width := 5;
    NewCheckBox.Height := 5;
    NewCheckBox.Visible := True;
    NewCheckBox.State := cbUnchecked;
    NewCheckBox.Name := 'CheckBox'+IntToStr(cant);
    NewCheckBox.Top := aTop;
    NewCheckBox.Tag := i;
    NewCheckBox.Color :=clWhite;
    NewCheckBox.OnClick := ClickLabels; //Asignamos el evento
    Inc(Cant);
    Inc(aTop,20);

    if i <> 0 then
    begin
      if (StringGrid1.Cells[1,i]='True') then
      begin
        NewCheckBox.Checked :=true;
      end
      else
      begin
        NewCheckBox.Checked :=false;
      end;

      NewCheckBox.Parent := StringGrid1;
      StringGrid1.Objects[1,i] := NewCheckBox;
      NewCheckBox.Caption := '';
      NewCheckBox.Visible := True;
    end;
  end;

  for j := 0 to StringGrid1.RowCount-1 do
  begin
    NewCheckBox := (StringGrid1.Objects[1,j] as TCheckBox);
    if NewCheckBox <> nil then
    begin
      Rect := StringGrid1.CellRect(1,j);
      NewCheckBox.Left := (StringGrid1.Left + Rect.Left+2)-25;//(StringGrid1.Left + Rect.Left+2)-40;
      NewCheckBox.Top := (StringGrid1.Top + Rect.Top+2)-15;
      NewCheckBox.Width := 20;//Rect.Right - Rect.Left;
      NewCheckBox.Height :=20; //Rect.Bottom - Rect.Top;
      NewCheckBox.Visible := True;
    end;
  end;
end;

end.

Espero haberme dado a entender con lo que quiero y de verdad agradezco a quienes se interesen y sugieran =). Gracias!
__________________
"El mejor alimento del alma, es la inspiración de uno mismo.."

Última edición por Jetzuvely21 fecha: 26-06-2012 a las 00:27:30. Razón: falto explicacion final
Responder Con Cita
  #5  
Antiguo 26-06-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Hola.

Mira ahora este hilo a ver si te sirve.

(me está entrando complejo de índice )

Saludos
__________________
Be water my friend.
Responder Con Cita
  #6  
Antiguo 26-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
Hola.
Mira ahora este hilo a ver si te sirve.
(me está entrando complejo de índice )
Saludos
Es que como se ha hablado de 'casi' todo, sólo hay que hacer una búsqueda y enlazar la respuesta

Es como la reunión de contadores de chistes, que en lugar de contarse los chistes, se indicaban el número:
Oye, conté el #15 y la gente se tronchaba de risa. Pues menos mal que no empezaste con el #28. Ja ja ja... sí, o el #31

Qué malo soy para los chistes
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Campos Booleanos Raistlin Firebird e Interbase 4 26-08-2008 21:05:46
Campos Booleanos carinacarboni Firebird e Interbase 5 28-09-2004 21:36:49
Filtros y campos booleanos AdrianD Tablas planas 2 13-01-2004 21:28:51
Dbgrid Que Permita Checkbox Para Datos Booleanos SoftMakerMex OOP 4 19-12-2003 20:46:38
Campos booleanos Eduardo Firebird e Interbase 3 02-11-2003 22:11:20


La franja horaria es GMT +2. Ahora son las 20:31:08.


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
Copyright 1996-2007 Club Delphi