Міністерство освіти та науки України
Національний університет “Львівська політехніка”
інститут комп’ютерних наук та інформаційних технологій
Кафедра “Системи автоматизованого проектування”
Звіт
до лабораторної роботи № 3
на тему: Створення компонентів-списків у середовищі візуального програмування Delphi
з курсу: “Застосування засобів об’єктно-орієнтованого програмування у лінгвістичних задачах”
Виконала:
студентка групи ПРЛм-1
Львів - 2008
Мета роботи: навчитися використовувати компоненти-списки TListBox і TComboBox.
Короткі теоретичні відомості
Компонент TListBox призначений для відображення списку рядків на екрані - список ListBox. Цей компонент має у своєму складі об'єкт-список, що є екземпляром класу TStrings і містить набір рядків з асоційованими з ними довільними об'єктами. Якщо говорити точніше, використовується не сам абстрактний клас TStrings, а його однойменні нащадки з перевизначеними методами. Таким чином, компонент ListBox, що є екземпляром класу TListBox, дозволяє відображати на екрані список рядків, кожна з який може бути зв'язана, наприклад, з деяким малюнком. Безпосереднім предком класу TListBox є клас TCustomListBox, що породжений від класу TWinControl. Отже, компонент ListBox є віконним керуючим елементом. Основні характеристики списку ListBox закладені в класі TCustomListBox. Головними з них є наявність списку рядків класу TStrings, засобів відображення списку і можливість маніпулювання його елементами.
Комбінований рядок введення ComboBox є екземпляром класу TCustomBox і поєднує в собі можливості рядка введення Edit і списку ListBox. По зовнішньому вигляду компонентів Combo Box нагадує звичайний рядок уведення Edit, але додатково має в правій частині кнопку зі стрілкою, спрямованої вниз. Якщо клацнути мишею по цій кнопці, з'явиться список, що випадає, подібний до списку компонента List Box. Наявність рядка введення в компонента Combo Box розширює його можливості в порівнянні зі звичайним списком List Box. Наприклад, використовуючи рядок уведення, можна вводити в список нові елементи, здійснювати пошук потрібного елемента в списку, відображати активний елемент списку. Основні характеристики комбінованого рядка введення закладені в класі TCustomComboBox, що є безпосереднім предком класу TCustomBox. Предком класу TCustomComboBox є безпосередньо базовий клас усіх віконних елементів керування TWinControl.
Оскільки в класі TComboBox у порівнянні з класом TListBox відсутня властивість MultiSelect, те в компоненті Combo Box не допускається множинний вибір. Основні операції для обробки списку в компоненті ComboBox - додавання, видалення, пошук, сортування елементів - здійснюється так само, як і в списку List Box. Подією за замовчуванням для комбінованого рядка введення ComboBox є подія OnChange, що виникає при зміні тексту у вікні редагування в результаті прямого редагування чи тексту в результаті вибору зі списку.
Частина 1
Текст програми
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
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;
a:array[1..10] of integer;
i,min,max,imin,imax:integer;
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.
Текст програми
unit Unit11;
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 Button2Click(Sender: TObject);
procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:array[1..10] of integer;
i,min,max,imin,imax,k: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.Button2Click(Sender: TObject);
begin
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;
end;
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then Button1.SetFocus;
end;
end.
Частина2
Текст програми
unit Unit12;
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 //вивід номера стрічок у 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;
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.
Частина3
Текст програми
unit Unit13;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
RadioGroup1: TRadioGroup;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(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
// Перевіряємо чи введені значення в компоненти 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;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9','+','-']) then Key:=#0;
end;
end.
Висновок
Отже, на даній лабораторній роботі я навчилася використовувати компоненти-списки TListBox і TComboBox.