delphi TStringGrid add CheckBox

思路:

重载DrawCell函数,根据Cell的值画Checked 和 UnChecked。

重载SelectCell函数,根据指定的列。变为只读然后修改cell的值进行重画。

代码如下:

procedure TForm1.FormCreate(Sender: TObject);
var
i,j : integer;
begin
// 行数和列数
StringGrid1.ColCount := 10;
StringGrid1.RowCount := 10;

// 缺省行高和列宽
StringGrid1.DefaultColWidth := 20;
StringGrid1.DefaultRowHeight := 20;

// 标题行数,标题列数
StringGrid1.FixedCols := 1;
StringGrid1.FixedRows := 1;

// 填充表格
for i := 0 to StringGrid1.ColCount do
begin
for j := 0 to StringGrid1.RowCount do
begin
if (j < 1) or (i < 1) then
StringGrid1.Cells[i,j] := IntToStr(j * StringGrid1.ColCount + i)
else
StringGrid1.Cells[i,j] := IntToStr(random(2));
end;
end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
sg : TStringGrid;
rct : TRect;
begin
if(Sender = nil) then exit;
sg := sender as TStringGrid;

if((ACol >= sg.FixedCols) and (ARow >= sg.FixedRows)) then
begin
rct.Left := (Rect.Right - Rect.Left - 16) div 2 + rect.Left;
rct.Top := (rect.Bottom - rect.top - 16) div 2 + rect.top;
rct.Right := rct.Left + 16;
rct.Bottom := rct.Top + 16;
if sg.Cells[ACol,ARow] = '1' then
DrawFrameControl(sg.Canvas.Handle, rct, DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_CHECKED)
else
DrawFrameControl(sg.Canvas.Handle, rct, DFC_BUTTON, DFCS_BUTTONCHECK);
end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var
sg : TStringGrid;
begin
sg := sender as TStringGrid;

if (ACol = 2) then
begin
Stringgrid1.Options := Stringgrid1.Options-[goEditing];

if sg.Cells[ACol,ARow] = '1' then
sg.Cells[ACol,ARow] := '0'
else
sg.Cells[ACol,ARow] := '1';
end
else
begin
Stringgrid1.Options := Stringgrid1.Options+[goEditing];
end;
end;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值