Implementation. procedure TGridForm.FormCreate (Sender: TObject); begin with GridArray do begin ColWidths[0]:=35; // Установка широты первой колонки Cells[O,1]:='1'; //

{$R *.DFM}

procedure TGridForm.FormCreate (Sender: TObject);
begin
with GridArray do
begin
ColWidths[0]:=35; // Установка широты первой колонки
Cells[O,1]:='1'; // Занесение значений в ячейки по умолчанию
Cells[0,2]:='2';
Cells[1,0]:='l';
Cells[2,0]:='2';
Cells[1,1]:='0';
end;
end;

procedure TGridForm.GridArraySetEditText (Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin {Параметры ACol и ARow задают номер измененной ячейки, a Value - новее значение}
with GridArray do
if Value='' then
UpdateGrid
else
begin
if ARow=RowCount-l then // Добавить новьй ряд
begin
RowCount:=ARow+2;
Cells[0,ARow+l]:=IntToStr(ARow+l);
end;
if ACol=ColCount-l then // Добавить новую колонку
begin
ColCount:=ACol+2;
Cells[ACol+1,0]:=IntToStr(ACol+1);
end;
try
StrToFloat(Value);
except
PanelStatus.Caption: =' Неверное вещественное значение';
exit;
end;
end;
PanelStatus:='';
end;

procedure TGridForm.UpdateGrid;
var x,y,maxx,maxy: Integer;
begin
with GridArray do
maxx:=1; maxy:=1; // Вычисляем максимальный номер заполненной строки
for x:=1 to ColCount-1 do
for y:=1 to RowCount-1 do
if Cells[x,y]<>'' then
begin
if x>maxx then maxx:=x;
if y>maxy then maxy:=y;
end;
ColCount:=maxx+2;
RowCount:=maxy+2;
end;
end;

procedure TGridFormGridArrayKeyDown(Sender: TOblect; var Key: Word; Shift: TShiftState);
begin {Нажата клавиша на клавиатуре, когда фокус ввода находится в таблице}
if Key=VK_DELETE then
with GridArray do
if not EditorMode and ((Col<>1) or (Rov<>l)) then
begin
Cells[Col,Row]:='';
UpdateGrid;
end;
end;

procedure TGridForm.ButtonOkClick (Sender: TObject);
var x,y: integer;
begin {Перед закрытием формы неободимо проверить правильность введенных значений}
with GridArray do
for y:=l to RowCount-2 do
for x:=1 to ColCount-2 do
if Cells[x,y] = '' then
begin
Col:=x; Row:=y; // Сделать незаполненную ячейку текущей
SetFocus; // Сделать таблицу активным элементом в форме
EditorMode:=Тruе; {Включить режим редактирования значений ячейки}
PanelStatus.Caption: ='Значение не введено';
exit;
end
else
try
StrToFloat (Cells [x,y]);
except
Col:=x; Row:=y; // Сделать неверную ячейку текущей
SetFocus; {Сделать таблицу активным элементом в форме}
EditorMode:=True; {Включить режим рэдакирования значений ячейки}
PanelStatus.Caption: ='Неверное вещественное значение';
end;
ModalResuit:=mrOk; // Форму надо закрьпъ, т.к. сшибок не найдено
end;

end.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: