Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Методические указания к работе 5

3.18. Компонент StringGrid (класс TStringGrid, палитра Additional) представляет собой таблицу, ячейки которой содержат строки символов. Свойства компонента приведены в табл. 12.

Таблица 12

Свойство Назначение
Name Имя компонента. Используется для доступа к компоненту и его свойствам. По умолчанию используются имена StringGrid1, StringGri2 и т.д.
ColCount Количество колонок таблицы
RowCount Количество строк таблицы
DefaultColWidth Ширина колонок таблицы
DefaultRowHeight Высота строк таблицы
FixedCols Количество зафиксированных сверху строк таблицы. Зафиксированные строки выделяются цветом и при вертикальной прокрутке таблицы остаются на месте
FixedRows Количество зафиксированных слева колонок таблицы. Зафиксированные колонки выделяются цветом и при горизонтальной прокрутке таблицы остаются на месте
FixedColor Определяет цвет фиксированной зоны
Cells Определяет содержимое ячейки с табличными координатами (ACol, ARow)
Left Расстояние от левой границы таблицы до левой границы формы
Top Расстояние от верхней границы таблицы до верхней границы формы
Width Ширина поля таблицы
Height Высота поля таблицы
Font Шрифт, используемый для отображения содержимого ячеек таблицы
Option.goEditing Разрешено редактирование ячейки. Редактирование начинается после щелчка мышью или нажатия клавиши F2 и завершается при щелчке на другой ячейке или нажатии клавиши Enter
Option.goTab Разрешено обходить ячейки клавишей Tab (Shift + Tab)
Option.goRowStrihg Разрешено ручное (мышью) изменение высоты строк
Option.goColString Разрешено ручное (мышью) изменение ширины колонок

Таблица делится на две части – фиксированную и рабочую (рис. 3). Фиксированная часть служит для показа заголовок колонок и строк, а также для ручного управления их размерами. Обычно фиксированная часть занимает левую колонку и верхнюю строку таблицы, однако с помощью свойств FixedCols и FixedRows можно задать другое количество фиксированных колонок и строк (если эти свойства имеют значение 0, таблица не содержит фиксированной зоны). Рабочая часть – это остальная часть таблицы. Она может содержать произвольное количество колонок и строк, более того, эти величины могут изменяться программно. Рабочая часть может не умещаться целиком в пределах окна компонента, в этом случае в него автоматически помещаются полосы прокрутки. При прокрутке рабочей области фиксированная область не исчезает, но меняется ее содержимое – заголовки колонок и строк.

Рис.4.

Важным свойством компонента является свойство Cells – двумерный массив ячеек, каждая из которых может содержать произвольный текст. Конкретная ячейка определяется парой чисел – номером колонки и номером строки, на пересечении которых она находится (нумерация начинается с нуля). Для доступа к ячейкам программно используется StringGrid1.Cells[i, j], где i — номер столбца, а j — номер строки. Свойство Cells имеет тип String, поэтому программа может легко прочитать или записать содержимое нужной ячейки. Например,

StringGrid1.Cells[1,0]:= 'Фамилия';

For i:=1 to m do

For j:=1 to n do

Begin

A[i,j]:=random(100);

StringGrid1.Cells[j,i]):= IntToStr(A[i,j]);

End;

Следует учитывать, что при доступе к элементу матрицы первый индекс – номер строки, а второй индекс – номер столбца, а при доступе к ячейкам таблице StringGrid – наоборот: первый индекс – номер столбца, а второй индекс – номер строки.

Выделенная ячейка таблицы имеет номер столбцаStringGrid1.Col и номер строки StringGrid1.Row, поэтому содержимое выделенной ячейки будет адресоваться так:

S:=StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];

или

with StringGrid1 do

S:=Cells[Col, Row];

Количество ячеек по каждому измерению хранят свойства ColCount (количество колонок) и RowCount (количество строк). Значения этих свойств и, следовательно, размеры таблицы могут меняться как на этапе разработки программы, так и в ходе ее работы, и их значения должны быть как минимум на единицу больше соответственно значений в свойствах FixedCols и FixedRows, определяющих размер фиксированной зоны.

По умолчанию в компонент StringGrid запрещен ввод информации с клавиатуры, поэтому, если необходимо редактировать содержимое ячеек, то свойство Options.goEditing нужно установить в положение True. После ввода значения в ячейку таблицы и нажатия клавиши Enter, курсор остается в текущей ячейке. Перейти в соседнюю ячейку можно с помощью мыши или с помощью клавиши Tab, если свойство Option.goTab имеет значение True. С помощью приведенного ниже алгоритма можно организовать автоматический переход курсора в следующую ячейку после нажатия клавиши Enter.

Если нажата клавиша Enter (Key = #13), то необходимо проверить не находится ли текущая ячейка в последнем столбце таблицы (StringGrid1.Col < StringGrid1.ColCount-1). Если не находится, то надо перейти к следующему столбцу таблицы (StringGrid1.Col:= StringGrid1.Col+1), если находится в последнем столбце, то надо проверить не находится ли текущая ячейка в последней строке (StringGrid1.Row < StringGrid1.RowCount-1). Если не находится, то надо перейти в начало строки (StringGrid1.Col:=1) и затем перейти к следующей строке (StringGrid1. Row:= StringGrid1. Row +1), если курсор находится в последней строке, то передать фокус командной кнопке Button1.SetFocus. Реализовать данный алгоритм целесообразно в процедуре обработки события OnKeyPress компонента StringGrid1.

Значения, введенные с клавиатуры, можно присвоить соответствующим элементам матрицы:

For i:=1 to m do

For j:=1 to n do

A[i,j]:=StrToInt(StringGrid1.Cells[j,i]); // или StrToFloat(StringGrid1.Cells[j,i]);

Содержимое ячеек фиксированной области недоступно редактированию с клавиатуры, и меняется только программно.

Таблица StringGrid, в отличие от, например, компонента Memo, не имеет метода для очистки содержимого сразу всех ячеек, поэтому для удаления внесенных в таблицу ранее данных приходится очищать каждую ячейку отдельно. Делается это двумя вложенными циклами For:

With StringGRid1 do

For i:=1 to RowCount-1 do //Заголовки строк в этом случае не очищаются

For j:=1 to ColCount-1 do //Заголовки столбцов в этом случае не очищаются

Cells[j, i]:='';

end;

Пример 3.2. Разработать программу, показывающую таблицу умножения.

На форму поместим компонент StringGrid. Обработчик onCreate формы (возникает двойным щелчком мыши по форме) будет таким:

Procedure TForm1.FormCreate(Sender: TObject);

Var x, y: integer;

Begin

// Задаем число столбцов и строк таблицы

StringGrid1.ColCount:= 10;

StringGrid1.RowCount:= 10;

// Задаем ширину и высоту ячеек

StringGrid1.DefaultColWidth:= 30;

StringGrid1.DefaultRowHeight:= 30;

// расставляем цифры от 1 до 9 в горизонтальной области заголовка

For x:= 1 to StringGrid1.ColCount - 1 do

StringGrid1.Cells[x, 0]:= IntToStr(x);

// расставляем цифры от 1 до 9 в вертикальной области заголовка

For y:= 1 to StringGrid1.ColCount - 1 do

StringGrid1.Cells[0, y]:= IntToStr(y);

// выводим результаты умножения в ячейки таблицы

For x:= 1 to StringGrid1.ColCount - 1 do

For y:= 1 to StringGrid1.RowCount - 1 do

StringGrid1.Cells[x, y]:= IntToStr(x*y);

End;

Число строк и столбцов, а также ширину и высоту ячеек можно было задать на этапе проектирования формы с помощью соответствующих свойств.

Результат работы программы представлен на рис. 4

Рис. 5

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...