Занесення інформації з бази даних до StringGrid
Для введення масиву зручно використовувати компонент StringGrid. Значок компонента StringGrid знаходиться на вкладціAdditional (рис. 5.2).
Мал. 5.2.Компонент StringGrid
Компонент StringGrid є таблицею, комірки якої містять рядки символів. У табл. 5.1 перелічені деякі властивості компонента StringGrid.
Таблиця 5.1.Властивості компонента StringGrid
Як приклад використання компонента stringGrid для введення масиву розглянемо програму, яка обчислює середнє арифметичне значення елементів масиву. Діалогове вікно програми наведено на рис. 5.3. Компонент stringGrid використовується для введення масиву, компоненти Label1 і Label2 – для виведення пояснювального тексту та результату розрахунку, Buttoni – для запуску процесу розрахунку.
Мал. 5.3.Діалогове вікно програмиВведення та обробка масиву
Додається компонент stringGrid у форму так само, як і інші компоненти. Після додавання компонента до форми потрібно виконати його налаштування відповідно до табл. 5.2. Значення властивостей Height і width слід за допомогою миші встановити такими, щоб розмір компонента дорівнював розміру рядка.
Текст програми наведено у лістингу 5.2.
Таблиця 5.2.Значення властивостей компонента StringGrid1
Листинг 5.2. Введення та обробка масиву цілих чисел
unit getar_;
Interface
Uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
Type
procedure ButtonlClick(Sender: TObject); private
Public
end;
Var
Implementation
procedure TForml.ButtonlClick(Sender: TObject);var
a: array[1..5] of integer; //масив
summ: integer; //сума елементів
sr: real; // середняарифметична
i: integer; //індекс
Begin
// вважаємо, що якщо осередок порожній, то відповідний
// їй елемент масиву дорівнює нулю
for i:= 1 to 5 do
if Length(StringGridl.Cells[i-1, 0]) <>0
then a[i] := StrToInt(StringGridl.Cells[i-1,0])
else a[i]: = 0;
for i :=1 to 5 do
summ: = summ + a [i]; sr: = summ / 5;
Увиведення результатуLabel2.Caption :=
'Сума елементів: ' + IntToStr(summ)
+ #13+ 'Середнє арифметичне:' + FloatToStr(sr);
end;
End.
Після пробних запусків програми виникає бажання внести зміни до процесу введення масиву. Так, було б непогано, щоб курсор автоматично переходив до наступного осередку таблиці, наприклад, в результаті натискання клавіші . Зробити це можна за допомогою процедури обробки події onKeyPress. На цю процедуру можна покласти завдання фільтрації введених в комірку таблиці даних. У нашому випадку треба дозволити введення в комірку лише цифр.
Текст процедури обробки події OnKeyPress наведено у лістингу 5.3. Слід звернути увагу на властивість Col, яка під час роботи програми містить номер колонки таблиці, де знаходиться курсор. Цю властивість можна використовувати для переміщення курсору в потрібну комірку таблиці. Однак слід враховувати, що колонки таблиці, втім, як і рядки, нумеруються з нуля.
Листинг 5.3. Процедура обробки події OnKeyPress
procedure TForm1.StringGridlKeyPress(Sender: TObject;
var Key: Char);
Begin
case Keyof
#8,'0'..'9':; //цифри та клавіша
if StringGridl.Col 0
then a[i] := StrToFloat(StringGridl.Cells[i-1, 0])else a[i] := 0;
for i :=1 to 5 do
summ: = summ + a [i]; sr: = summ / 5;
'Сума елементів: ' + FloatToStr(summ)
+ #13+ 'Середнє арифметичне:' + FloatToStr(sr); end;
'/Функція забезпечує введення в комірку тільки допустимих символів
procedure TForm1.StringGridlKeyPress(Sender: TObject; var Key: Char);
Begin
Case Key of
if StringGridl.Col DecimalSeparatorthen
Key := DecimalSeparator; //замінимо роздільник
DecimalSeparator)<> 0
then Key := Chr(O); //заборона введення другого
// роздільникаend;
' -' : //мінус можна ввести лише першим символом,
// тобто коли комірка порожня
if Length(StringGrid1.Cells[StringGrid1.Col, 0]) <>0then
Key := Chr(0) ;
else //Інші символи заборонені