Работает ли проверка диапазона ячеек TStringGrid?
Ниже приведен код для простого приложения формы Delphi, которое устанавливает значения ячеек, выходящие за пределы диапазона, для указанного TStringGrid, который содержит ячейки.
Запуск программы и нажатие на результирующую сетку в отображаемой форме должно генерировать ошибку проверки диапазона времени выполнения, когда счетчик i становится выше 1.
Проверка диапазона включена в опциях проекта, и я попытался запустить программу с директивой компилятора {R+} и без нее.
Почему нет ошибки проверки диапазона?
Я использую Delphi7 под управлением Windows 7 (64 бит).
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.
1 ответ
Из документации (выделение добавлено):
Директива $R включает или отключает генерацию кода проверки диапазона. В состоянии {$R+} все выражения индексации массивов и строк проверяются как находящиеся в определенных границах, а все присваивания скалярным и поддиапазонным переменным проверяются в пределах диапазона. Если проверка диапазона заканчивается неудачей, возникает исключение ERangeError (или программа завершается, если обработка исключений не включена).
Ссылки на ячейки TStringGrid не входят в число типов переменных и назначений, которые подлежат проверке диапазона.