Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 3.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
702 Кб
Скачать
☆

3.4. Компоненты StringGrid и Memo

Компоненты StringGrid и Memo прежде всего предназначены для ввода и отображения строк. Однако их можно использовать и для работы с числовой и графической информацией.

3.4.1. Кмпонент StringGrid - таблица строк

Компонент StringGrid представляет собой таблицу, ячейки которой содержат строки. Иконка компонента расположена в закладке Additional Палитры компонентов. Иконка и основные свойства отображения таблицы приведены на рисунке 3.6.

Рисунок 3.6 - Компонент StringGrid и его свойства

Основное свойство компонента StringGrid - это Cells:

Cells [<номер столбца>, <номер строки>] - ячейки таблицы.

На рисунке 3.8 показано отображение таблицы, свойства которой определены в Инспекторе объектов (рисунок 3.7).

Рисунок 3.7 - Компонент StringGrid и его отображение

Пример инициализации таблицы StrinqGrid

procedure TForm1.OnFormActivate(Sender: TObject); begin

//Свойства таблицы приведены на рисунке 3.7

with StringGrid1 do begin

Cells[0, 1]

= 'Строка 1';

Cells[0, 2]

= 'Строка 2';

Cells[1, 0]

= 'Столбец 1';

Cells[2, 0]

= 'Столбец 2';

Cells[3, 0]

= 'Столбец 3';

Cells[4, 0]

= 'Столбец 4';

Cells[1, 1]

= '1, 1'

Cells[2, 1]

= '1, 2'

Cells[3, 1]

= '1, 3'

Cells[4, 1]

= '1, 4'

Cells[1, 2]

= '2, 1'

Cells[2, 2]

= '2, 2'

Cells[3, 2]

= '2, 3'

Cells[4, 2]

= '2, 4'

end;

end;

Результат выполнения этой процедуры:

Рисунок 3.8 – Отображение таблицы

Полезными при разработке программ будут следующие свойства компонента StringGrid:

Col - номер столбца

ColCount - количество столбцов Row - номер строки

RowCount - количество строк

      1. Ввод массива. Компонент StringGrid

Используем компонент StringGrid (Massiv: TStringGrid;) для ввода значений элементов массива (A: array[1..N] of integer;).

Ш аг 1. Интерфейс Пользователя

В Инспекторе объектов определяем значения следующих свойств

Свойство

Значение

Комментарий

ColCount

10

Количество столбцов

DefaultColWidth

40

Ширина столбца (по умолчанию)

FixedCols

0

Количество фиксированных столбцов

FixedRows

0

Количество фиксированных строк

RowCount

1

Количество строк

Шаг 2. Обработка события OnKeyPress компонента StringGrid

procedure TForm1.MassivKeyPress(Sender: TObject; var Key: Char);

begin

case Key of

#8,'0'..'9' : ; ; // можно ввести числа 0..9 и удалить предыдущий

// символ ( #8 - клавиша Backspace)

#13: // клавиша Enter

if Massiv.Col < Massiv.ColCount-1 then

Massiv.Col := Massiv.Col + 1; // курсор устанавливается в

// следующий столбец

else

key := Chr(0); // не обрабатывать нажатие других клавиш

end;

end;

Шаг 3. Формирование массива из строк компонента StringGrid

Поместим этот код в обработчик события (например, OnClick - щелчок по кнопке), которой вызывается после заполнения ячеек компонента StringGrid

for i:= 1 to N do if Length(Massiv.Cells[i-1, 0]) <>0

then // ячейка содержит непустую строку

a[i]:= StrToInt(Massiv.Cells[i-1,0]) // преобразуем строку в число и

// помещаем в массив

else

a[i] := 0; // пустая ячейка - значение элемента массива = 0

Шаг 4. Выполнение приложения

После запуска приложения (вычисляет сумму значений элементов массива, рисунок 3.9) щелкнем мышью в первой ячейке компонента StringGrid, вводим значение и нажимаем клавишу Enter. Повторяем эти действия для ввода остальных значений массива.

Рисунок 3.9 - Компонент StringGrid и его использование для ввода

значений элементов массива

Для примера введем значения 1, 2, 10. Щелкнем по кнопке Сумма. Вызывается обработчик, который формирует массив из строк ячеек StringGrid (смотри Шаг 3) и вычисляет сумму.

      1. Компонент Memo - многострочное окно редактирования

Компонент Memo обладает так же, как компонент Edit, свойствами и функциями редактора текста.

Основное свойство - Lines содержит текст окна редактирования в виде списка строк.

Свойство Strings[Index:Integer] можно использовать для того, чтобы получить текст строки.

Например, Memo1.Strings[0] - это текст первой строки в окне редактирования.

Методы LoadFromFile/SaveToFile свойства Lines позволяют загружать/сохранять текст в/из окна редактирования.

Свойство CaretPos может использоваться для определения положения курсора в окне редактирования, а, следовательно, и получения значения символа (перед которым стоит курсор).

Например, Memo1.CaretPos.Y+1 - номер строки,

Memo1.CaretPos.X+1 - номер символа в строке.

      1. Ввод массива. Компонент Memo

Используем компонент Memo (MassivMemo: TMemo;) для ввода значений элементов массива (A: array[0..N-1] of integer;). На рисунках 3.10, 3.11 приведен код модуля AverageUnit, в котором использован компонент Memo для ввода массива и вычисления среднего арифметического его значений

Рисунок 3.10 - Модуль AverageUnit

Рисунок 3.11 - Модуль AverageUnit

Рисунок 3.12 - Компонент Memo и его использование для ввода значений

элементов массива