МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт
до лабораторної роботи №3
на тему: “Створення компонентів-списків у середовищі візуального програмування Delphi.”
з курсу
“Застосування засобів об’єктно-орієнтованого програмування в лінгвістичних задачах”
Мета: Навчитися використовувати компоненти-списки TListBox і TcomboBox, GroupBox, RadioButton, StringGrid, CheckBox.
Теоретичні відомості
Компонент TListBox призначений для відображення списку рядків на екрані - список ListBox.Цей компонент має у своєму складі об'єкт-список, що є екземпляром класу TStrings і містить набір рядків з асоційованими з ними довільними об'єктами. Якщо говорити точніше, використовується не сам абстрактний клас TStrings, а його однойменні нащадки з перевизначеними методами.Таким чином, компонент ListBox, що є екземпляром класу TListBox, дозволяє відображати на екрані список рядків, кожен з яких може бути зв'язаний, наприклад, з деяким малюнком. Безпосереднім предком класу TListBox є клас TCustomListBox, що породжений від класу TWinControl. Отже, компонент ListBox є віконним керуючим елементом. Основні характеристики списку ListBox закладені в класі TCustomListBox. Головними з них є наявність списку рядків класу TStrings, засобів відображення списку і можливість маніпулювання його елементами.
TcustomListBox визначає індекс виділеного елемента в списку. Нумерація елементів починається з нуля. Якщо виділеного елемента немає, ця властивість приймає значення, рівне -1. Якщо в списку може бути виділено кілька елементів, вказується індекс активного виділеного елемента. Властивість доступна тільки на етапі виконання програми.
Комбінований рядок введення ComboBox є екземпляром класу TCustomBox і поєднує в собі можливості рядка введення Edit і списку ListBox. По зовнішньому вигляду компонентів Combo Box нагадує звичайний рядок уведення Edit, але додатково має в правій частині кнопку зі стрілкою, спрямованої вниз.Якщо клацнути мишею по цій кнопці, з'явиться список, що випадає, подібний до списку компонента List Box. Наявність рядка введення в компонент Combo Box розширює його можливості в порівнянні зі звичайним списком List Box. Наприклад, використовуючи рядок уведення, можна вводити в список нові елементи, здійснювати пошук потрібного елемента в списку, відображати активний елемент списку.
Основні характеристики комбінованого рядка введення закладені в класі TCustomComboBox, що є безпосереднім предком класу TCustomBox. Предком класу TCustomComboBox є безпосередньо базовий клас усіх віконних елементів керування TWinControl.
Основні операції для обробки списку в компоненті ComboBox - додавання, видалення, пошук, сортування елементів - здійснюється так само, як і в списку ListBox.
Порядок виконання роботи
Частина 1. Використання компонента TListBox
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
var
a:array[1..10] of integer;
i,min,max,imin,imax:integer;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
ListBox1: TListBox;
ListBox2: TListBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
ListBox1.Clear;
ListBox2.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(Edit1.Text);
i:=i+1;
a[i]:=StrToInt(Edit1.Text);
Edit1.SetFocus;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
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]));
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then Button1.SetFocus;
end;
end.
Частина 2. Використання компонента TComboBox
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:array[1..10] of integer;
i,min,max,imin,imax:integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
ComboBox1.Clear;
ComboBox2.Clear;
ComboBox1.TabOrder:=0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.Items.Add(ComboBox1.Text);
i:=i+1;
a[i]:=StrToInt(ComboBox1.Text);
ComboBox1.SetFocus;
end;
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then Button1.SetFocus;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
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
ComboBox2.Items.Add(IntToStr(a[i]));
ComboBox2.DroppedDown:=true;
end;
end.
Частина 3
Розробити програму яка дозволяє заповнювати 2-х вимірний масив випадковими цілими числами, знаходити максимальне та мінімальне значення елементів масиву та обраховує додаток головної діагоналі масиву.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
Randomize;
with StringGrid1 do
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
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;
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;
end.
Частина 4
Розробити програму, яка дозволяє виконувати основні арифметичні дії (Калькулятор) та перевіряє чи введені в поля операндів числові дані.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
RadioGroup1: TRadioGroup;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
a,b:integer;
c:real;
begin
if (Edit1.Text<>'') and (Edit2.Text<>'') then
begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
Edit3.Text:=' ';
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;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(Key in['0'..'9','+','-']) then Key:=#0;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if not(Key in['0'..'9','+','-']) then Key:=#0;
end;
end.
Висновок: на цій лабораторній роботі я навчилася використовувати компоненти-списки TListBox і TcomboBox, GroupBox, RadioButton, StringGrid, CheckBox, дізналася про їх властивості, а також розробила програми, одна з яких виконує основні арифметичні функції, а інша - заповнює 2-х вимірний масив випадковими цілими числами, знаходить максимальне та мінімальне значення елементів масиву та обраховує додаток головної діагоналі масиву.