Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП всі лабораторні.doc
Скачиваний:
2
Добавлен:
28.08.2019
Размер:
1 Мб
Скачать
☆

9.1.1. Розміщення компонентів на Формі

Розмістимо на Формі компоненти Label, SpinEdit, Button і StringGrid.

Рис. 9.1

Збережемо модуль під ім'ям UnDinMas (текст модуля приведений в п.9.1.3).

9.1.2. Створення процедур обробки подій FormCreate і Button1Click

Подвійним натисненням клавіші “миші” на Формі і кнопці Button1 створіть відповідні процедури обробки подій. Користуючись текстом модуля UnDinMas, уважно наберіть операторів цих процедур.

За бажання можна створити процедуру, яка виділятиме заданим кольором межі осередків з найменшим і найбільшим значеннями в компоненті StringGrid. Для створення такої процедури зробіть активним компонент StringGrid і на сторінці Events(події) Інспектора Об'єктів двічі клацніть “мишею” в правій частині події OnDrawCell. У відповідь Delphi створить обробник цієї події – процедуру procedure TForm1.StringGrid1DrawCell і встановить курсор між операторами begin і end цієї процедури. Використовуючи текст модуля UnDinMas, уважно наберіть операторів процедури TForm1.StringGrid1DrawCell.

9.1.3. Текст модуля UnDinMas

Unit UnDinMas;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs

StdCtrls, Spin, Grids, Buttons;

type

TForm1 = class(TForm)

Label1: TLabel;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

Label8: TLabel;

StringGrid1: TStringGrid;

Label2: TLabel;

Label5: TLabel;

Label3: TLabel;

Button1: TButton;

Label4: TLabel;

Label6: TLabel;

Label7: TLabel;

Label9: TLabel;

procedure FormCreate(Sender: TObject);

procedure SpinEdit1Change(Sender: TObject);

procedure SpinEdit2Change(Sender: TObject);

procedure StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;

Rect: TRect; State: TGridDrawState);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

Type

Mas=array[1..1] of integer; // масив цілочисельних значень

pMas=array[1..1] of ^mas; // масив покажчиків

var // оголошення глобальних змінних

pA:^pMas; // покажчик на масив покажчиків

m,n,max,min:integer;

procedure TForm1.FormCreate(Sender: TObject);

begin

m:=6; // початкове значення m

n:=8; // початкове значення n

SpinEdit1.Text:='6';

SpinEdit2.Text:='8';

StringGrid1.RowCount:=m; // кількість рядків

StringGrid1.ColCount:=n; // кількість стовпців

end;

procedure TForm1.SpinEdit1Change(Sender: TObject);

begin

m:=StrToInt(SpinEdit1.Text);// m привласнюється вміст поля редактора

StringGrid1.RowCount:=m;

end;

procedure TForm1.SpinEdit2Change(Sender: TObject);

begin

n:=StrToInt(SpinEdit2.Text);// n привласнюється вміст поля редактора

StringGrid1.ColCount:=n;

end;

procedure TForm1.Button1Click(Sender: TObject);

label 1;

var

i,j,k,l,r:integer;

begin

Randomize; // ініціалізація датчика випадкових чисел

GetMem(pA,4*m); // виділення пам'яті для масиву з m покажчиків

for i :=1 to m do

begin // формування i-й рядка масиву

{ Виділення пам'яті для n елементів i-й рядка}

GetMem(pA^[i],SizeOf(integer)*n);

pA^[1]^[1]:=Random(1000);// випадкове ціле число занести в масив

for j:=1 to n do

begin // формування j-го елемента рядка

1: r:=Random(1000); // генерування випадкового числа

for k:=1 to i do

for l:=1 to j do

if r=pA^[k]^[l] then // якщо таке число вже є в масиві тоді...

goto 1;

pA^[i]^[j]:=r; // випадкове число занести в масив

end;

end;

for i:=1 to m do // елементи масива занести в осередки

for j:=1 to n do // компонента StringGrid1

StringGrid1.Cells[j-1,i-1]:=IntToStr(pA^[i]^[j]);

{ Пошук min і max значень серед елементів масива}

max:=pA^[1]^[1];

min:=max;

for i:=1 to m do

for j:=1 to n do

if pA^[i]^[j]<min then

min:=pA^[i]^[j]

else

if pA^[i]^[j]>max then

max:=pA^[i]^[j];

Label7.Caption:=IntToStr(min); // виведення min значення

Label9.Caption:=IntToStr(max); // виведення max значення

for i:=1 to m do

{ Вивільнення пам'яті, займаної n елементами i-й рядка}

FreeMem(pA^[i],SizeOf(integer)*n);

{ Звільнення пам'яті, займаної масивом з m покажчиків}

FreeMem(pA,4*m);

end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;

Rect: TRect; State: TGridDrawState);

begin

with StringGrid1.Canvas do

if StringGrid1.Cells[Col,Row]=IntToStr(min) then // якщо елемент осередку

begin // рівний min тоді...

Brush.Color:=clGreen; // встановити колір кисті зелений

FrameRect(Rect); // виділити межі осередку заданим кольором

end

else

if StringGrid1.Cells[Col,Row]=IntToStr(max) then // якщо елемент осередку

begin // рівний max тоді...

Brush.Color:=clRed; // встановити колір кисті червоний

FrameRect(Rect); // виділити межі осередку заданим кольором

end

end;

end.