为什么这三行代码不起作用?
我在Frame中建立3个GroupBox,每一个都包含一个StringGrid(所有的StringGrid都只有两列,但行数不限。而且StringGrid无侧边栏,即:StringGrid.FixedRows = 1 , StringGrid.FixedCols = 0。另外,StringGrid的Option中的goEditing和goRowSelect两个属性全部设为True)。我现在想实现如下目的:
1、在StringGrid中,单击一次,StringGrid自动添加一行。
2、将StringGrid中的单元格改变边框颜色等操作。
由于共有3个StringGrid,而所有StringGrid都想实现以上两个功能。所以自定义了两个事件用来实现这两个功能。但在From中引用Frame后,按F9运行,未提示错误,但不起任何作用。
代码如下:
public
{ Public declarations }
procedure ClickStringGrid;
procedure StringGridDrawCell(ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
implementation
{$R *.dfm}
procedure TF_FrameStringGrid.ClickStringGrid;
Var
sgdCount: Integer;
begin
For sgdCount := 0 To F_FrameStringGrid.ControlCount -1 Do
begin
IF F_FrameStringGrid.Controls[sgdCount] IS TStringGrid Then
(F_FrameStringGrid.Controls[sgdCount] as TStringGrid).RowCount :=
(F_FrameStringGrid.Controls[sgdCount] as TStringGrid).RowCount + 1;
end;
end;
procedure TF_FrameStringGrid.StringGridDrawCell(ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
Var
sgdSum: Integer;
begin
For sgdSum := 0 To F_FrameStringGrid.ControlCount -1 Do
begin
IF F_FrameStringGrid.Controls[sgdSum] IS TStringGrid Then
begin
(F_FrameStringGrid.Controls[sgdSum] as TStringGrid).Canvas.Pen.Color := clRed;
(F_FrameStringGrid.Controls[sgdSum] as TStringGrid).Canvas.Brush.Style := bsClear;
(F_FrameStringGrid.Controls[sgdSum] as TStringGrid).Canvas.Rectangle(Rect);
end;
end;
end;
那些添加行、修改边框的代码,在先开始,我是一个StringGrid,一个StringGrid的做,可以实现。但改成所有的StringGrid一起修改后,就不起作用了。比如:
StringGrid1.RowCount := (F_FrameStringGrid.Controls[sgdCount] as TStringGrid).RowCount + 1;
StringGrid1.Canvas.Pen.Color := clRed;
这样一个StringGrid一个StringGrid1的做,就可以实现,改了以后,就不能实现了。错在哪儿?
3、在Form中调用Frame后,在Form显示时,希望将每一个StringGrid的第1行的第1、2列(即表头)设为想要的汉字标题。但输入代码后,也是没有反应。
由于3个StringGrid中的标题不同,所以将这个功能的代码放在Form.Active中。
procedure TF_BaseHiddenSet.FormActivate(Sender: TObject);
begin
inherited;
F_BaseHiddenSet.Height := 656;
F_BaseHiddenSet.Width := 763;
F_DataModule.ADOTable1.TableName := 'HiddenSet';
F_DataModule.ADOTable1.Open;
F_FrameStringGrid.sgdForUnits.Cells[0,0] := '被检单位';
F_FrameStringGrid.sgdForUnits.Cells[1,0] := '负 责 人';
F_FrameStringGrid.sgdUnits.Cells[0,0] := '检查单位';
F_FrameStringGrid.sgdUnits.Cells[1,0] := '负 责 人';
F_FrameStringGrid.sgdRectify.Cells[0,0] := '整改期限';
F_FrameStringGrid.sgdRectify.Cells[1,0] := '整改结果';
end;
[解决办法]
不需要