Работает ли проверка диапазона ячеек 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 не входят в число типов переменных и назначений, которые подлежат проверке диапазона.

Другие вопросы по тегам