396 Урок 13. Приложения для обработки строк, массивов и файлов
Создание табеля с оценками опишите в процедуре обработчика события создания формы Form1. Для этого выберите в окне Инспектора объектов объект Form1 и на странице События сделайте двойной щелчок мышью на пустом поле списка в событии OnCreate, наступающем при создании формы. После этого в окне Редактора кода будет сгенерирована заготовка процедуры обработчика события procedure TForml.FormCreate(Sender: TObject);.
Вставьте в текст модуля main перед разделом implementation описание раздела констант и переменных, задающих постоянные параметры массива и столбцов StringGrid1:
const COLWIDTHS : array[0..5] of integer=(85.70.70.70.70,60);
{ширина столбцов таблицы}
COLTITLES : аггау[0..5] of string=('Предмет','1-я четверть','2-я четверть','3-я четверть','4-я четверть','годовая');
{шапка таблицы}
{вариант выравнивания} {объект Form1} {ширина курсора} |
COLALIGNS : array[0..5] of byte=(1.2.2.2,2,2);
var
Form1: TForm1;
Col All:integer;
Отредактируйте заготовку процедуры обработчика этого события следующим образом:
procedure TForml.FormCreate(Sender: TObject); |
|
var I,J:integer; |
|
К : real; |
|
begin |
|
for i:=0 to 5 do |
|
begin |
|
Inc(ColAll,C0LWIDTH5[i]+l); |
|
{Подсчет общей ширины для курсора} |
|
StringGridl.ColWidths[i] := COLWIDTHS[i]; |
|
{Установка ширины колонок} |
|
StringGridl.Cells[ i.0 ] := COLTITLES[i]; |
|
{Установка шапки таблицы} |
|
end; |
|
with StringGrid1 do begin {Массив сданными успеваемости} |
|
Cells[ 0, 1] |
='Русский язык'; |
Cells[ 0, 2] |
= 'Математика'; |
Cells[ 0, 3] |
= 'История'; |
Cells[ 0, 4] |
='География': |
Cells[ 0. 5] |
='Музыка'; |
{Оценки за 1-ю четверть - 2-й столбец}
Использование компонента StringGrid для представления двухмерных массивов 397
Cells[ 1, |
1] |
= '5' |
Cells[ 1, |
2] |
= '4' |
Cells[ 1. |
3] |
= '4' |
Cells[ 1. |
4] |
= '4' |
Cells[ 1. |
5] |
= '5' |
{Оценки за 2-ю четверть - 3-й столбец}
Cells[ 2. |
1] |
= '4' |
Cells[ 2. |
2] |
= '2' |
Cells[ 2. |
3] |
= '4' |
Cells[ 2. |
4] |
= '5' |
Cells[ 2. |
5] |
= '3' |
{Оценки за 3-ю четверть - 4-й столбец}
Cells[ 3, |
1] |
= '5' |
Cells[ 3. |
2] |
= '2' |
Cells[ 3. |
3] |
= '3' |
Cells[ 3, |
4] |
= '4' |
Cells[ 3. |
5] |
= '5' |
{Оценки за 4-ю четверть - 5-й столбец}
Cells[ 4, |
1] |
= '4' |
Cells[ 4, |
2] |
= '3' |
Cells[ 4, |
3] |
= '4' |
Cells[ 4. |
4] |
= '5' |
Cells[ 4. |
5] |
= '5' |
{6-й столбец: вычисление оценок за год как среднего арифметического оценок за 4 учебные четверти} for I:=1 to 5 do begin К:=0; for J:=l to 4 do
K:=K+StrToInt(Cells[J,I]): K:=K/4: {вычисление среднего балла за год}
Cells[J.I]:-FloatToStr(K): end; end; end;
Как видно из текста процедуры, сначала задаются параметры «шапки» таблицы, затем задаются элементы массива: названия предметов и оценки за 1—4-ю четверти. В заключительном фрагменте процедуры вычисляется оценка за год как среднее арифметическое оценок по предмету за все четверти.
398 Урок 13. Приложения для обработки строк, массивов и файлов
Для раскраски ячеек StringGridl создайте процедуру обработчика события OnDrawCell, для чего выберите в окне Инспектора объектов объект StringGrid и на странице Свойства сделайте двойной щелчок мышью на пустом поле списка в событии OnDrawCell. После этого отредактируйте заготовку процедуры обработчика этого события следующим образом:
procedure TForm1,StringGridlDrawCell(Sender: TObject: Col. Row: Integer: Rect: TRect; State: TGridDrawState);
var
CurrCel1:String: {текущая ячейка}
begin
with TStringGrid(sender).Canvas,Rect do
begin
CurrCe11:=TStringGnd(sender).Ce11s[Col.Row];
Bottom:=Bottom+l;
Font.Color:=clBlack: {цвет шрифта}
Brush.Color:=clWhite; {цвет закраски}
if Row<l then begin {если нулевая строка, то рисуем шапку таблицы}
Bfush.Color:=clBtnFace: {цвет закраски - текущий цвет кнопок}
Bottom:-Bottom-1;
DrawEdge(Handle, Rect. BDR_RAISEDINNER, BF_TOPRIGHT or
BF_MIDDLE or BF_B0TT0MLEFT):
InflateRect(Rect,-2,-2):
TextRect(Rect,Left- 2+((COLWIDTHS[Col]TextWidth(CurrCell))shr 1). Top-2,CurrCell):
exit:
end; case |
Col |
of |
|
0: |
brush.Color |
=clBlue |
|
1 |
.4: |
brush.Color |
=clAqua |
{закраска ячеек в разных столбцах}
{нулевой столбец синий} {первый - четвертый столбцы -голубые}
{цвет закраски пятого столбца и цвет шрифта символов зависит от значения ячейки} if StrToFloat(CurrCell)<3 then begin brush.Color:=clRed; {если оценка <3, то цвет закраски красный}
Использование компонента StringGrid для представления двухмерных массивов
399
Font.Colог;=с1Aqua; {цвет шрифта символов голубой} end else
if StrToFloat(CurrOell)<4 then begin brush.Color:=clYellow; {если оценка <4, то цвет закраски желтый}
Font.Color:=clOlive; |
{цвет шрифта символов |
оливковый} |
|
end |
|
else |
|
begin |
|
brush.Color;=clGreen; |
{иначе - цвет закраски |
зеленый} |
|
Font.Color:=clYellow; |
{цвет шрифта символов желтый |
end; |
end;
{выравнивание значений в столбцax(COLALIGNS)}
case COLALIGNS[Col] of 1; TextRect(Rect.Left,Top.CurrCell); {влево}
2; TextRect(rect,Left+((COLWIDTHS[Col]TextWidth(CurrCell)) shr 1).Top.CurrCell); {по центру} end;
{левая граница} {верхняя граница} {правая граница} {цвет} |
{рисование курсора выделения строки} if (Row=TStringGrid(sender).Row) then begin Left:=0;
Bottom:=Bottom-1; Right:=ColAll; Brush. Color:=clBlack; TStringGrid(sender).Canvas.FrameRect(Rect): {курсор в таблице} end; end; end;
Изучите текст процедуры и комментарии к ее фрагментам. Сохраните файлы модуля и проекта, откомпилируйте и запустите приложение. Окно приложения будет выглядеть, как на рис. 13.9.
Проверьте работу приложения. Закройте окно приложения и задайте другие значения элементов массива, например, изменив оценки за 4-го четверть, как показано далее:
Cells[ 4, 1]:='5'; Cells[ 4. 2]:='4'; CelIs[ 4, 3]: = '3'; Cells[ 4, 4]:='4'; Cells[ 4, 5]:='3';
Сохраните изменения в проекте, перекомпилируйте и запустите приложение. Обратите внимание на то, что с изменением значения среднего балла
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.