Компонент 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 (можно вызвать процедуру двойным щелч-
ком по форме):
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 Key<>DecimalSeparator //заменим разделитель
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. Исключение ошибки контроля диапазона
Опубликовал Kest
December 02 2009 20:52:05 ·
2 Комментариев ·
33231 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Макс March 08 2010 07:31:50
Отлично!!!
Давно искал такой гайд по Гриду
roamer October 23 2022 17:37:43
Здесь тоже есть ряд функций (в рамках темы):