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
public
end;
var
Form1: TForm1;
NewCheckBox: TCheckBox;
implementation
{$R *.DFM}
procedure TForm1.ClickLabels(Sender: TObject);
var
vfila: Integer;
begin
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; 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; NewCheckBox.Top := (StringGrid1.Top + Rect.Top+2)-15;
NewCheckBox.Width := 20; NewCheckBox.Height :=20; 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!