Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Використання компоненту StringGrid

Введення масиву

Під введенням масиву розуміється процес отримання від користувача (або з файлу) під час роботи програми значень елементів масиву.

"Лобове" рішення задачі введення елементів масиву - для кожного елементу масиву створити поле введення. Проте якщо потрібно ввести достатньо великий масив, то таке рішення неприйнятно. Представте форму, наприклад, з десятьма полями редагування!

Очевидно, що послідовність чисел зручно вводити в рядок таблиці, де кожне число знаходиться в окремому осередку. Нижче розглядаються два варіанти організації введення масиву з використанням компонентів StringGrid І Memo.

 

Для введення масиву зручно використовувати компонент StringGrid. Значок компоненту StringGrid знаходиться на вкладці Additional (рис. 2).

Рисунок 2 Компонент StringGrid

 

Компонент StringGrid є таблицею, осередки якої містять рядки символів. У табл. 1 перераховані деякі властивості компоненту StringGrid.

 

Таблиця 1. Властивості компоненту StringGrid

Властивість Визначає
Name Ім'я компоненту. Використовується в програмі для доступу до властивостей компоненту
Властивість Визначає
ColCount Кількість колонок таблиці
RowCount Кількість рядків таблиці
Cells Відповідний таблиці двовимірний масив. Елемент таблиці, що знаходиться на перетині стовпця номер col і рядки номер row визначається елементом cells [col, row]
FixedCols Кількість зафіксованих зліва колонок таблиці. Зафіксовані колонки виділяються кольором і при горизонтальній прокрутці таблиці залишаються на місці
FixedRows Кількість зафіксованих зверху рядків таблиці. Зафіксовані рядки виділяються кольором і при вертикальній прокрутці таблиці залишаються на місці
Options. goEditing Ознака допустимості редагування вмісту елементів таблиці. True - редагування дозволене, False - заборонено
Options. goTab Вирішує (True) або забороняє (False) використання клавіші <Таb> для переміщення курсора в наступний елемент таблиці
Options. GoAlways-ShowEditor Ознака знаходження компоненту в режимі редагування. Якщо значення властивості False, то для того, щоб в осередку з'явився курсор, треба почати набирати текст, натиснути клавішу <F2> або зробити клацання мишею
DefaultColWidth Ширину колонок таблиці
DefaultRowHeight Висоту рядків таблиці
GridLineWi-dth Ширину ліній, що обмежують елементи таблиці
Left Відстань від лівої межі поля таблиці до лівої межі форми
Top Відстань від верхньої межі поля таблиці до верхньої межі форми
Height Висоту поля таблиці
Width Ширину поля таблиці
Font Шрифт, використовуваний для відображення вмісту елементів таблиці
ParentFont Ознака спадкоємства характеристик шрифту форми

 

Приклад. Як приклад використання компоненту stringGrid для введення масиву розглянемо програму, яка обчислює середнє арифметичне значення елементів масиву. Діалогове вікно програми приведене на рис.3. Компонент stringGrid використовується для введення масиву, компоненти Label1 і Label2 - для виведення тексту, пояснення, і результату розрахунку Button1 - для запуску процесу розрахунку.

Рисунок 3 Діалогове вікно програми Введення і обробка масиву

 

Додається компонент stringGrid у форму точно так, як і інші компоненти. Після додавання компоненту до форми потрібно виконати його настройку табл. 2. Значення властивостей Height і width слідує за допомогою миші встановити такими, щоб розмір компоненту був рівний розміру рядка.

Текст програми приведений в лістингу.

 

Таблиця 2 Значення властивостей компоненту StringGrid1

Властивість Значення
ColCount  
FixedCols  
RowCount  
DefaultRowHeight  
Height  
DefaultColWidth  
Width  
Options. goEditing True – можливість вводити з клавіатури дані
Options. AlwaysShowEditing True – можливість редагувати осередок
Options.goTabs True – можливість пересуватися між осередками за допомогою кнопки «Tab»

 

Лістинг 2. Введення і обробка масиву цілих чисел

unit getar_;

interface

uses

Windows, Messages, SysUtils, Variants

Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

StringGridl: TStringGrid;

Button1: TButton;

Label2: TLabel;

procedure ButtonlClick(Sender: TObject); private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForml;

implementation

{$R *.dfm}

procedure TForml.ButtonlClick(Sender: TObject);

var

а: 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 а[i]:= StrToInt(StringGridl.Cells[i-1,0])

else а[i]:= 0;

// обробка масиву

summ:= 0;

for i:=1 to 5 do

summ:= summ + а[i]; sr:= summ / 5;

//У виведення результату

Label2.Caption:='Сумма елементів: ' + IntToStr(summ)+ #13+ 'Середнє Арифметичне: ' + FloatToStr(sr);

end;

end.

 

Після пробних запусків програми виникає бажання внести зміни в процес введення масиву. Так, було б непогано, щоб курсор автоматично переходив в наступний елемент таблиці, наприклад, в результаті натиснення клавіші <Enter>. Зробити це можна за допомогою процедури обробки події onKeyPress. На цю ж процедуру можна покласти завдання фільтрації даних, що вводяться в елемент таблиці. У нашому випадку треба вирішити введення в осередок тільки цифр.

Текст процедури обробки події OnKeyPress приведений в лістингу. Слід звернути увагу на властивість Col, яка під час роботи програми містить номер колонки таблиці, в якій знаходиться курсор. Цю властивість можна також використовувати для переміщення курсору в потрібний елемент таблиці. Проте потрібно враховувати, що колонки таблиці, втім, як і рядки, нумеруються з нуля.

 

Лістинг 3. Процедура обробки події OnKeyPress

procedure TForm1.StringGridlKeyPress(Sender: TObject;

var Key: Char);

begin

case Key of

#8,'0'..'9':; // цифри і клавіша <Backspace>

#13: // клавіша <Enter>

if StringGridl.Col < StringGridl.ColCount — 1

then StringGridl.Col:= StringGridl.Col + 1;

else key:= Chr(0); // решта символів заборонена

end;

end;

 

Якщо потрібно ввести масив дробових чисел (а: array [1..5] of real), то процедура обробки події OnKeyPress дещо ускладниться, оскільки крім цифр допустимими символами є символ-роздільник (кома або крапка — залежить від настройки Windows) і мінус. З метою забезпечення деякої дружності програми по відношенню до користувача можна застосувати трюк: підмінити невірний роздільник, що вводиться користувачем, вірним. Визначити, який символ-роздільник допустимий в поточній настройці Windows, можна, звернувшись до глобальної змінної Decimaiseparator.

У лістингу 4 приведений текст модуля застосування введення і обробки масиву дробових чисел. Процедура обробки події OnKeyPress забезпечує введення в елемент таблиці тільки допустимих при записі дробового числа символів.

Лістинг 4. Введення і обробка масиву дробових чисел

unit. getar_1; interface

uses

 

Windows, Messages, SysUtils, Variants, Classes

Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;

type

TForm1= class(TForm)

Label1: TLabel;

StringGrid1: TStringGrid;

Button1: TButton;

Label2: TLabel;

procedure Button1ClicktSender: TObject);

procedure StringGridlKeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonlClick(Sender: TObject);

var

а: array[1..5] of real; // масив

suram: real; // сума елементів

sr: real; // середнє арифметичне

i: integer; // індекс

begin

// введення масиву

// вважаємо, що якщо осередок порожній, то відповідний

// нею елемент масиву рівний нулю

for i:= 1 to 5 do

if Length(StringGridl.Cells[i-l,0])<>0

then а[i]:= StrToFloat(StringGridl.Cells[i-1, 0]) else а[i]:= 0;

// обробка масиву

summ:= 0;

for i:=1 to 5 do

summ:= summ + а[i]; sr:= summ / 5;

// виведення результату

Label2.Caption:=

'Сума елементів: ' + FloatToStr(summ)

+ #13+ 'Середнє Арифметичне: ' + FloatToStr(sr); end;

'/ Функція забезпечує введення в осередок тільки допустимих символів

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

begin

case Key of

#8,'0'..'9':; // цифри і <Backspace>

#13: // клавіша <Enter>

if StringGridl.Col < StringGridl.ColCount - 1

then StringGridl.Col:= StringGridl.Col + 1; '.',',':

// роздільник цілої і дробової частин числа

begin

if Key <> DecimalSeparator then

Key:= DecimalSeparator; // замінимо роздільник

// на допустимий

if Pos(StringGridl.Cells[StringGridl.Col,0],

DecimalSeparator) <> 0

then Key:= Chr(O); // заборона введення другого

// роздільника end;

' -': // мінус можна ввести тільки першим символом

// тобто коли осередок порожній

if Length(StringGrid1.Cells[StringGrid1.Col, 0])<>0 then

Key:= Chr(0);

else // решта символів заборонена

key:= Chr(0);

end;

end;

end.

<== предыдущая лекция | следующая лекция ==>
Виведення масиву | Використання компоненту Memo
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 1489; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.057 сек.