Ver Mensaje Individual
  #4  
Antiguo 26-06-2012
Jetzuvely21 Jetzuvely21 is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 22
Reputación: 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