МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
EMBED PBrush
Національний Університет “Львівська політехніка”
Створення компонентів-списків у середовищі візуального програмування Delphi.
ІНСТРУКЦІЯ
до лабораторної роботи № 3
з курсу
“Застосування засобів об’єктно-орієнтованого програмування в лінгвістичних задачах” спеціальності 07.030505 “Прикладна лінгвістика”.
ЗАТВЕРДЖЕНО
На засіданні кафедри “Системи
Автоматизованого проектування”
Протокол №___ від _________
Львів - 2007
Створення компонентів-списків у середовищі візуального програмування Delphi.
Інструкція до лабораторної роботи №3 з курсу “Застосування засобів об’єктно-орієнтованого програмування в лінгвістичних задачах” для студентів спеціальності 07.030505 “Прикладна лінгвістика”. Укл. Д.В. Корпильов. Львів НУЛП, 2007.
Укладач: Д.В. Корпильов, асистент.
Відповідальний за випуск С.П. Ткаченко, к.т.н., доцент
Рецензенти І.І. Мотика, к.т.н., доцент
Ціль: Навчиться використовувати компоненти-списки TListBox і TcomboBox, GroupBox, RadioButton, StringGrid, CheckBox.
Що ми робимо?
У цілочисленому масиві знайти максимальний і мінімальний елементи і поміняти їхній місцями.
Частина перша
Теоретичні відомості.
Компонент TListBox
Сторінка Палітри Компонентів: Standard.
Ієрархія:
TObject→TPersistent→TComponent→TControl→TWinControl→
TCustomListBox→ TListBox
Компонент TListBox призначений для відображення списку рядків на екрані - список ListBox.
Цей компонент має у своєму складі об'єкт-список, що є екземпляром класу TStrings і містить набір рядків з асоційованими з ними довільними об'єктами. Якщо говорити точніше, використовується не сам абстрактний клас TStrings, а його однойменні нащадки з перевизначеними методами.
Таким чином, компонент ListBox, що є екземпляром класу TListBox, дозволяє відображати на екрані список рядків, кожна з який може бути зв'язана, наприклад, з деяким малюнком. Безпосереднім предком класу TListBox є клас TCustomListBox, що породжений від класу TWinControl. Отже, компонент ListBox є віконним керуючим елементом.
Основні характеристики списку ListBox закладені в класі TCustomListBox. Головними з них є наявність списку рядків класу TStrings, засобів відображення списку і можливість маніпулювання його елементами.
Основні властивості класу TCustomListBox:
property Itemlndex: Integer;
Визначає індекс виділеного елемента в списку. Нумерація елементів починається з нуля. Якщо виділеного елемента немає, ця властивість приймає значення, рівне -1. Якщо в списку може бути виділено кілька елементів, вказується індекс активного виділеного елемента. Властивість доступна тільки на етапі виконання програми.
property Items: TStrings;
Задає елементи списку.
property MultiSelect: Boolean;
Визначає, чи дозволяється одночасно виділяти кілька елементів списку (якщо True, те таке виділення можливо, у противному випадку виділити можна тільки один елемент).
property Selected [Index: Integer]: Boolean;
Якщо i-ий елемент списку виділений, то Selected[i] дорівнює True, у противному випадку - False. Властивість доступна тільки на етапі виконання програми.
property Sorted: Boolean;
Указує, чи належні рядки в списку автоматично сортуватися за абеткою.
Метод procedure Clear видаляє всі елементи списку.
Подією за замовчуванням для списку є подія OnClick.
ComboBox - комбінований рядок введення
Сторінка Палітри Компонентів: Standard.
Ієрархія:
TObject→TPersistent→TComponent→TControl→TWinControl →
TCustomComboBox
Комбінований рядок введення ComboBox є екземпляром класу TCustomBox і поєднує в собі можливості рядка введення Edit і списку ListBox. По зовнішньому вигляду компонентів Combo Box нагадує звичайний рядок уведення Edit, але додатково має в правій частині кнопку зі стрілкою, спрямованої вниз.
Якщо клацнути мишею по цій кнопці, з'явиться список, що випадає, подібний до списку компонента List Box. Наявність рядка введення в компонента Combo Box розширює його можливості в порівнянні зі звичайним списком List Box. Наприклад, використовуючи рядок уведення, можна вводити в список нові елементи, здійснювати пошук потрібного елемента в списку, відображати активний елемент списку.
Основні характеристики комбінованого рядка введення закладені в класі TCustomComboBox, що є безпосереднім предком класу TCustomBox. Предком класу TCustomComboBox є безпосередньо базовий клас усіх віконних елементів керування TWinControl.
Основні властивості класу TСustomComboBox:
property DropDownCount: Integer;
Визначає максимальне число елементів, відображуване в списку, що розкривається.
property DroppedDown: Boolean;
Указує, чи відображається розкривається список у даний момент. Властивість доступна тільки на етапі виконання програми.
property Itemlndex: Integer;
Визначає індекс виділеного елемента в списку. Нумерація елементів починається з нуля. Якщо виділеного елемента немає, воно приймає значення, рівне -1. Властивість доступна тільки на етапі виконання програми.
property Items: TStrings;
Так само, як і в класі TCustomListBox, задає елементи списку.
type TComboBoxStyle = (csDropDown, csSimple, csDropDownList, csOwnerDrawFixed, csOwnerDrawVariable); property Style: TComboBoxStyle;
Визначає стиль зображення списку:
csDropDown - рядка списку мають однакову фіксовану висоту, що збігається з вікном редагування, що дозволяє вводити чи редагувати текст;
csSimple - список завжди розкритий;
csDropDownList - рядка списку мають однакову фіксовану висоту, вікно редагування відсутне;
csOwnerDrawFixed - рядок списку має висоту, обумовлену властивістю ItemHeight, і не можуть редагуватися в рядку введення;
csOwnerDraw Variable - рядок списку має висоту, обумовлену в оброблювачі події OnMeasureltem, що виникає при необхідності одержання висоти елемента перед його перемальовуванням, і не можуть редагуватися в рядку введення.
type TCaption = string; property Text: TCaption;
Містить текст обраної чи введеної користувачем стрічки. Властивість успадкована від класу TControl.
Оскільки в класі TComboBox у порівнянні з класом TListBox відсутня властивість MultiSelect, те в компоненті Combo Box не допускається множинний вибір.
Основні операції для обробки списку в компоненті ComboBox - додавання, видалення, пошук, сортування елементів - здійснюється так само, як і в списку ListBox.
Подією за замовчуванням для комбінованого рядка введення ComboBox є подія OnChange, що виникає при зміні тексту у вікні редагування в результаті прямого редагування чи тексту в результаті вибору зі списку.
Порядок виконання роботи
Частина 1. Використання компонента TListBox
1. Відкрити новий додаток за допомогою команди File| New Application.
2. Зберегти проект у вашому робочому каталозі, виконавши команду меню File|Save Project As.
3. З сторінки Standard на Form1 помістити компоненти Edit1:TEdit; Button1, Button2:TButton, ListBox1,ListBox2:TListBox.
4. Встановити значення властивості Text компонента Edit1 – порожній рядок.
5. Установити для лівої кнопки значення властивості Caption рівним ‘Введення’, а для правої- ‘Рішення’.
6. У розділ interface модуля вставити опис масиву і змінних що використовуються
a:array[1..10] of integer;
i,min,max,imin,imax:integer;
7. Виконати подвійне натискання на формі Form1, у результаті чого буде створена база події OnCreate для форми, що виникає в момент створення форми.
Розміщення операторів у цьому оброблювачі в багатьох випадках еквівалентно розміщенню операторів у секції initialation модуля. Помістити там наступні рядки
i:=0;
ListBox1.Clear;
ListBox2.Clear;
8. Виконати подвійний щиглик по кнопці «Введення» і в оброблювач події OnClick помістимо наступний код:
ListBox1.Items.Add(Edit1.Text);
i:=i+1;
a[i]:=StrToInt(Edit1.Text);
Edit1.SetFocus;
9. Виконати подвійне натискання по кнопці «Рішення» і в оброблювач події OnClick помістимо наступний код:
max:=a[1];
imax:=1;
min:=a[1];
imin:=1;
for i:=2 to 10 do
begin
if max<a[i] then
begin max:=a[i]; imax:=i end;
if min>a[i] then
begin min:=a[i]; imin:=i end;
end;
a[imax]:=min;
a[imin]:=max;
for i:=2 to 10 do
ListBox2.Items.Add(IntToStr(a[i]));
10. Для зручності роботи з додатком створити оброблювач події OnKeyDown для рядка введення Edit1, у якому при натисканні на клавішу Enter фокус уведення буде переводитися на кнопку «Ввести»:
if key=13 then Button1.SetFocus;
11.Запустити програму. Для введення цілих чисел використовуємо рядок Edit1. Введення кожного числа завершуємо натиснувши двічі клавішу Enter, або натиснувши кнопку «Введення».Уведені числа відображаються в першому списку. Після натискання на кнопку «Рішення» одержимо результат у другому списку.
Частина 2. Використання компонента TComboBox
1.Відкрити новий додаток за допомогою команди File| New Application.
2.Збережете проект у вашому робочому каталозі, виконавши команду меню File|Save Project As.
3. З сторінки Standard на Form1 помістити компоненти Button1, Button2:TButton, ComboBox1,ComboBox2:TComboBox.
4. Встановити властивість DropDownCount для компонентів ComboBox1 і ComboBox2 рівним 10.
6. Установити значення властивості Text компонентів ComboBox1 і ComboBox2– порожній рядок.
7. У розділ interface модуля вставити опис масиву і змінних що використовуються
a:array[1..10] of integer;
i,min,max,imin,imax:integer;
8. Установити наступний оброблювач події OnCreate для форми:
i:=0;
ComboBox1.Clear;
ComboBox2.Clear;
ComboBox1.TabOrder:=0;
9. Виконати подвійний натискання на кнопці «Введення» і в оброблювач події OnClick помістимо наступний код:
ComboBox1.Items.Add(ComboBox1.Text);
i:=i+1;
a[i]:=StrToInt(ComboBox1.Text);
ComboBox1.SetFocus;
10. Виконати натискання на кнопці «Рішення» і в оброблювач події OnClick помістимо наступний код:
max:=a[1]; imax:=1;
min:=a[1]; imin:=1;
for k:=2 to 10 do
begin
if max<a[k] then
begin max:=a[k]; imax:=k
end;
if min>a[k] then
begin min:=a[k]; imin:=k end;
end;
a[imax]:=min;
a[imin]:=max;
for k:=1 to 10 do
ComboBox2.Items.Add(IntToStr(a[k]));
ComboBox2.DroppedDown:=true;
11. Для зручності роботи з додатком створити оброблювач події OnKeyDown для списку ComboBox1, у якому при натисканні на клавішу Enter фокус уведення буде переводитися на кнопку «Ввести»:
if key=13 then Button1.SetFocus;
12. Запустити програму. Для введення цілих чисел використовуємо список ComboBox1. Введення кожного числа завершуємо натиснувши двічі клавішу Enter, або натиснувши кнопку «Ввести». Введені числа відображаються в першому списку. Після натискання на кнопку «Рішення» одержимо результат у другому списку.
Частина 2
Розробимо програму яка дозволяє заповнювати 2-х вимірний масив випадковими цілими числами, знаходити максимальне та мінімальне значення елементів масиву та обраховує додаток головної діагоналі масиву.
1. Розмістити на формі компоненти StringGrid з палітри компонентів Additional
2. Розмістити на формі компоненти GroupBox з палітри компонентів Standard
3. Розмістити на формі компоненти CheckBox, Edit з палітри компонентів Standard
4. Розмістити на формі компоненти Button з палітри компонентів Standard
5. Поміняти властивість Caption для форми та кожного компонента, як показано малюнку
6. Прив’язати для клавіші «Заповнити» процедуру.
procedure TForm1.Button1Click(Sender: TObject);
var
i,j: integer;
begin
Randomize; // Генератор випадкових чисел
with StringGrid1 do //вивід номера стрічок у 0- стовпці, та номера стовпців у // 0- стрічці
begin
i:=0;
for j:= 1 to RowCount - 1 do // Вивести номера стрічок
Cells[i,j] := IntToStr(j);
j:=0;
for i:= 1 to ColCount - 1 do // Вивести номера стовпців
Cells[i,j] := IntToStr(i);
end;
with StringGrid1 do // Вивести в таблиці елементи 2-х вимірного масиву
for i:= 1 to ColCount - 1 do
for j:= 1 to RowCount - 1 do
begin
Cells[i,j] := IntToStr(Round(Sin(Random(100))*100));
end;
end;
7. Прив’язати для клавіші «Обчислити» процедуру.
procedure TForm1.Button2Click(Sender: TObject);
var
min,max,sum: integer;
i,j: integer;
begin
if Checkbox1.Checked then // Визначення мінімального ел. в масиві
with StringGrid1 do
begin
Min:= StrToInt(Cells[1,1]);
for i := 1 to ColCount -1 do
for j := 1 to RowCount -1 do
if StrToInt(Cells[i,j]) < min then
min := StrToInt(Cells[i,j]);
Edit1.Text := IntToStr(min);
end
else Edit1.Text := '';
if Checkbox2.Checked then // Визначення максимального ел. в масиві
with StringGrid1 do
begin
Max:= StrToInt(Cells[1,1]);
for i := 1 to ColCount -1 do
for j := 1 to RowCount -1 do
if StrToInt(Cells[i,j]) > max then
max := StrToInt(Cells[i,j]);
Edit2.Text := IntToStr(max);
end
else Edit2.Text := '';
if Checkbox3.Checked then // Визначення додатку головної діагоналі масиву
with StringGrid1 do
begin
sum:= 0;
for i := 1 to ColCount -1 do
sum := Sum + StrToInt(Cells[i,i]);
Edit3.Text := IntToStr(sum);
end else Edit3.Text := '';
end;
8. Запустити на виконання програму
8.1. Вікно робочої програми має наступний вигляд
8.2. Натиснути на клавішу «Заповнити» - отримаємо заповнений масив
7.3. Вибрати одну з дій та натиснути на клавішу «Обчислити»
Частина 3
Розробимо програму яка дозволяє виконувати основні арифметичні дії (Калькулятор) та перевіряє чи введені в поля операдів числові дані.
Розмістити на формі компоненти Label, Edit, Button, RadioGroup з палітри компонентів Standard
2. В компоненті RadioGroup в властивості Items встановити математичні знаки операцій. Вони автоматично нумеруються від 0 до 3.
Пирв’язуємо до клавіши “Обчислити” процедуру
procedure TForm1.Button1Click(Sender: TObject);
var
a,b: integer;
c: real;
begin
// Перевіряємо чи введені значення в компоненти Edit1, Edit2
if (Edit1.Text <> ' ') and (Edit2.Text <> ' ') then
begin
// Перетворюємо введені значення в ціли числа
a:= StrToInt(Edit1.Text);
b:= StrToInt(Edit2.Text);
Edit3.Text:=' ';
// За допомого оператору case вибираемо яку математичну дію ми // виконуємо
case RadioGroup1.ItemIndex of
0: c := a+b;
1: c := a-b;
2: c := a*b;
3: if b=0 then ShowMessage('На нуль ділити неможна');
else c:= a/b;
end;
if RadioGroup1.ItemIndex <> 3 then Edit3.Text := FloatToStrF(c,ffGeneral,10,4)
else
if b<>0 then Edit3.Text := FloatToStrF(c,ffGeneral,10,4);
end
else ShowMessage('Не задані значення');
end;
Перевіряємо чи введені в поля операндів числові дані якщо введені, виконуємо обрахунок, якщо не введені блокується запис в поля операндів. Для цього необхідно виділити компонент Edit1, в Object Inspector -> Events виділити подію OnKeyPress та подвійно натиснути на вільному полі автоматично утворюється процедура яка превіряє чи введені числові дані.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9','+','-']) then Key:=#0;
end;
5. Робимо таку саму перевірку перевірку для компонента Edit2
Запускаємо програму на виконання
Питання для самоперевірки
Для чого призначений компонент TlistBox, які основні властивості компонента?
Для чого призначений компонент TComboBox, які основні властивості компонента?
Для чого призначений компонент GroupBox, які основні властивості компонента?
Для чого призначений компонент RadioButton, які основні властивості компонента?
Для чого призначений компонент StringGrid, які основні властивості компонента?
Для чого призначений компонент CheckBox, які основні властивості компонента?.
Основні інструменти Delphi.
Зміст звіту
Титульна сторінка.
Мета роботи.
Теоретичні відомості.
Приклад створеної програми.
Вихідні результати.
Висновок.