Тема. Отображение данных в табличной форме
Вы уже ознакомились с приемами ввода и вывода значений элементов одномерного массива с использованием компонентов Memo, ListBox. Но поскольку алгоритмы обработки массивов предназначены для работы с таблицами данных, для большей наглядности работы программы желательно отображать содержимое массива в виде таблицы.
Использование компонента StringGrid
- Компонент StringGrid (Вкладка Additional) предназначен для вывода различных данных в табличной форме.
- Как следует из названия, клетки компонента StringGrid могут содержать данные типа String.
Таблица StringGrid может состоять из фиксированных клеток-заголовков FixedCols и FixedRows, выделенных серым цветом, и обычных клеток белого цвета:
- Обращение к ячейке таблицы, находящейся на пересечении столбца с номером col и строки с номером row, имеет вид StringGrid1.Cells [col, row]
- Нумерация столбцов (col) и строк (row) начинается с нуля.
Рассмотрим основные свойства компонента StringGrid, с помощью которых можно определить структуру и вид таблицы.
Задание 1. Рассмотрим пример настройки вида элемента StringGrid1 для отображения одномерного массива
Вариант 1.
- Выполним загрузку Lazarus
- Установим на форме компоненты StringGrid1 и Button1 , Button2.
-
Для компонента назначим значение свойств согласно таблице:
Вывод фиксированной строки с индексами элементов массива не является обязательным, но бывает очень полезным при анализе работы программы. - Заполним ячейки нулевой строки значениями индексов (i) элементов массива. Содержание фиксированных клеток меняется только программным способом, обычно в процедуре обработки события OnCreate для формы:
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin // нумерация столбцов и строк начинается с нуля
For i := 1 to 6 do StringGrid1.Cells[i - 1, 0] := IntToStr(i);// нумерация столбцов нулевой строки
end; -
Заполним массив случайными числами в диапазоне от 0 до 40
procedure TForm1.Button1Click(Sender: TObject);
var a: array[1..6] of Integer; i: Integer;
begin
Randomize;
For i := 1 to 6 do
begin
a[i] := Random(40);
StringGrid1.Cells[i - 1, 1] := IntToStr(a[i]);//заполнение ячеек второй строки данными
end;
end;Очистить содержимое таблицы:
procedure TForm1.Button2Click(Sender: TObject);
begin
StringGrid1.Rows[1].Clear;
end;
Вариант 2.
Программный код procedure TForm1.Button1Click(Sender: TObject); stringGrid1.cells[i-1, 0] := inttostr(i);{создание заголовка первой строки таблицы, следует помнить что нумерация строк и столбцов начинается с нуля} stringGrid1.cells[i-1, 1] := inttostr(a[i]); // вывод элементов массива в ячейки второй строки таблицы |
Вариант 3.
Программный код var Процедура для кнопки " нумерация столбцов": procedure TForm1.Button1Click(Sender: TObject); Процедура для кнопки " заполнение элементами массива второй строки таблицы": |
procedure TForm1.Button2Click(Sender: TObject); |
Редактирования содержимого ячеек таблицы StringGrid
1. За возможность редактирования обычных клеток соответствуют значения свойства Options.
2. В окне Инспектор объектов список значений свойства Options содержит 32 элемента, которые могут принимать значения True или False.
3. Чтобы в ходе выполнения программы можно было редактировать содержимое ячеек, необходимо предоставить значение True таким элементам списка Options:
Задание 2. Заполнить таблицу с клавиатуры и найти среднее арифметическое элементов массива
В качестве примера использования компонента stringGrid для ввода массива рассмотрим программу, которая вычисляет среднее арифметическое значение элементов массива.
Интерфейс проекта Компонент stringGrid используется для ввода массива, |
Значение свойств компонента StringGrid1
PS! фиксированная строка с индексами элементов массива отсутствует |
Программный код
procedure TForm1.Button1Click(Sender: TObject); Вариант вывода информации: Label2.Caption := 'сумма элементов: '+ FloatToStrF(summ,ffFixed,10,3)+ #13 + 'среднее арифметическое:' + FloatToStrF(sr,ffFixed,10,3); |
Задание 3. Найти наибольшее и наименьшее значение среди элементов линейного массива и поменять их местами.
Алгоритм проекта
|
Интерфейс проекта
|
Программный код Вариант 1. procedure TForm1.Button1Click(Sender: TObject); for i:= 2 to 10 do a[nmax] := min; a[nmin] := max; //обмен значениями наибольшего и наименьшего элементов массива
Вариант 2. procedure TForm1.FormCreate(Sender: TObject); procedure TForm1.Button1Click(Sender: TObject); for i:= 2 to 10 do procedure TForm1.Button2Click(Sender: TObject); |