КАТЕГОРИИ: Архитектура-(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
Приклад. Як приклад використання компоненту stringGrid для введення масиву розглянемо програму, яка обчислює середнє арифметичне значення елементів масиву. Діалогове вікно програми приведене на рис.3. Компонент stringGrid використовується для введення масиву, компоненти Label1 і Label2 - для виведення тексту, пояснення, і результату розрахунку Button1 - для запуску процесу розрахунку. Рисунок 3 Діалогове вікно програми Введення і обробка масиву
Додається компонент stringGrid у форму точно так, як і інші компоненти. Після додавання компоненту до форми потрібно виконати його настройку табл. 2. Значення властивостей Height і width слідує за допомогою миші встановити такими, щоб розмір компоненту був рівний розміру рядка. Текст програми приведений в лістингу.
Таблиця 2 Значення властивостей компоненту StringGrid1
Лістинг 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.
Дата добавления: 2014-01-04; Просмотров: 1521; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |