Компонент String Grid (страница Additional) представляет собой

Компонент String Grid (страница Additional) представляет собой
таблицу, ячейки которой содержат строки символов. Он используется при
решении задач с выводом какой-либо последовательности чисел (массива),
букв. Таблица состоит из N столбцов и M строк для отображения двумер-
ной информации. Если зафиксировать необходимое количество строк и
столбцов, то можно задавать заголовки, постоянно присутствующие у
компонента (шапку). Каждая ячейка находится на пересечении строк и
столбцов, нумерация которых начинается с нуля: адрес ячейки [3,5] – 4
столбец, 6 строка. Основные свойства компонента приведены в табл. 5.2.
Таблица 5.2. Свойства компонента String Grid

Для определения поведения таблицы используется комбинированное
свойство Options , принимающее значения False или True. Рас-
смотрим вложенные свойства исходя из того, что каждое из них находится
в значении True:
goFixedVertLine — фиксированные ячейки разделяются вертикаль-
ными линиями;
goFixedHorzLine — фиксированные ячейки разделяются горизон-
тальными линиями;
goVertLine — ячейки (кроме фиксированных) разделены вертикаль-
ными линиями;
goHorzLine — ячейки (кроме фиксированных) разделены горизон-
тальными линиями;
goRangeSelect — допустимо выделение нескольких ячеек;
goDrawFocusSelected — активная ячейка закрашивается тем же цве-
том, что и выделенная, иначе (false) цветом нейтральных ячеек;
goRowSizing — высота строк может меняться;
goColSizing — ширина столбцов может меняться;
goRowMoving — строки могут перемещаться (обмен);
goColMoving — столбцы могут перемещаться (обмен);
goEditing — ячейки могут редактироваться;
goTabs — перемещение между ячейками клавишами или
+;
goRowSelect — выделение только целых строк таблицы (отдельно
ячейку false);
goAlwaysShowEditor — признак нахождения ячейки в режиме редак-
тирования. Если false, то для того чтобы в ячейке появился курсор,
надо нажать клавишу или щелкнуть мышью;
goThumbTracking — перемещение подвижной части таблицы син-
хронно с перемещением полосы прокрутки (ползунка). Если false,
то ползунок опустится до конца, а потом будет двигаться таблица.
Пример. Найти среднее арифметическое элементов одномерного мас-
сива (с использованием компонента StringGrid).
Поместим компоненты на форме в соответствии с рис. 5.14 и устано-
вим их свойства в соответствии с табл. 5.3.
Таблица 5.3. Свойства и их значения


Рис. 5.14. Форма на этапе конструирования


Рис. 5.15. Форма на этапе выполнения

Для формирования заголовков таблицы необходимо сгенерировать со-
бытие для формы FormCreate (можно вызвать процедуру двойным щелч-
ком по форме):
procedure TForm1.FormCreate(Sender: TObject);
begin
//формирование заголовка таблицы
sgMass.Cells[0,0]:=’1-ый элемент’;
sgMass.Cells[1,0]:=’2-ый элемент’;
sgMass.Cells[2,0]:=’3-ый элемент’;
sgMass.Cells[3,0]:=’4-ый элемент’;
sgMass.Cells[4,0]:=’5-ый элемент’
end;

Программный код для кнопки Вычислить:
var a: array[1..5] of real;
summ: real; //сумма элементов
sr: real; //среднее арифметическое
aa: real;
ssumm,ssr: string;//переменные для вывода результатов
i, code: integer;
begin
summ:=0;
for i:=1 to 5 do
begin
if length(sgMass.Cells[i-1,1])0
then // если ячейка не пуста,
begin // определяем значение элемента
val(sgMass.Cells[i-1,1],aa,code);
a[i]:=aa
end
else //если ячейка пуста, то элемент равен 0
a[i]:=0;
summ:=summ+a[i]
end;
sr:=summ/5;
str(summ:6:3,ssumm);
str(sr:6:3,ssr);
laRes.Caption:=’Сумма=’+ssumm+#13+’ Ср.ар. =’+ssr
end;

Для исключения ошибок ввода для компонента таблицы генерируем
событие OnKeyPress, которое определяет переход по ячейкам при нажа-
тии клавиши , допускает ввод цифр и нажатие клавиши
, а также определяет разделитель целой и дробной частей.
procedure TForm1.sgMassKeyPress(Sender: TObject; var Key:
Char);
begin
case Key of
‘0’..’9′,#8: ; //разрешен ввод цифр и нажатие Backspase
#13: if sgMass.Col then sgMass.Col:=sgMass.Col+1
else btVithisl.SetFocus;
‘.’,’,’:
begin //разделитель целой и дробной частей числа
if KeyDecimalSeparator //заменим разделитель
then Key:=DecimalSeparator; // на допустимый
if Pos(DecimalSeparator,sgMass.Cells[sgMass.Col,1])0
then Key:=Chr(0)//запрет ввода второго разделителя
end;
‘-‘: //минус можно ввести только первым
if length(sgMass.Cells[sgMass.Col,1])0
then Key:=Chr(0);
else Key:=Chr(0)
end {case}
end;

Примечание: глобальная переменная DecimalSeparator определяет,
какой символ допустим в текущей настройке Windows в качестве раздели-
теля целой и дробной частей. Разделитель разрядов целой и дробной час-
тей установлен в настройках ОС Windows, как правило, по умолчанию это
«,». Для изменения можно воспользоваться командой Пуск/Настройка/
Панель управления/Язык и региональные стандарты, далее вкладка
Региональные параметры, кнопка Настройка, поле Разделитель целой и
дробной частей.
При работе с массивами возникают ошибки времени выполнения. На-
пример, заявлен массив с индексами от 1 до 5 , а в программе просмотр
элементов массива организован с i=0.
var A: array [1..5] of real;
begin
for i:=0 to 4 do A[i]:=StrToFloat(StringGrid.Cells[i,1]);
{ошибка контроля диапазона}

Для исключения ошибки кон-
троля диапазона необходимо
воспользоваться пунктом главно-
го меню Project/Options, на
вкладке Compiler снять переклю-
чатель Range checking (рис. 5.16).

Рис. 5.16. Исключение ошибки контроля диапазона

Понравилась статья? Поделиться с друзьями: