TStringGrid单元格的范围检查工作吗?
下面是一个简单的Delphi窗体应用程序的代码,它为包含单元格的指定TStringGrid设置超出范围的单元格值。
运行该程序并单击显示窗体上的结果网格时,如果计数器i高于1,则会生成运行时间范围检查错误。
在项目选项中启用了范围检查,并且我尝试了使用和不使用{R +}编译器指令来运行程序。
为什么没有范围检查错误?
我使用在Windows 7(64位)上运行的Delphi7。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure StringGrid1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{$R+}
procedure TForm1.StringGrid1Click(Sender: TObject);
var
i : Integer;
begin
Form1.StringGrid1.ColCount := 2;
Form1.StringGrid1.RowCount := 3;
for i := 0 to Form1.StringGrid1.RowCount do begin
Form1.StringGrid1.Cells[0,i+1] := IntToStr(i);
end;
end;
end.
从文档( 重点添加 ):
$ R指令启用或禁用范围检查代码的生成。 在{$ R +}状态下,所有数组和字符串索引表达式都被验证为在定义的范围内,并且标量和子范围变量的所有赋值都被检查在范围内 。 如果范围检查失败,则会引发ERangeError异常(或者如果未启用异常处理,程序将终止)。
TStringGrid单元格引用不属于受范围检查限制的变量和赋值类型。
链接地址: http://www.djcxy.com/p/50641.html上一篇: Does range checking on TStringGrid cells work?
下一篇: How to prohibit an unintended tStringGrid onSelectCell event firing