Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornye_OOP.doc
Скачиваний:
17
Добавлен:
11.03.2015
Размер:
1.04 Mб
Скачать
  1. Модуль Trian.

unit Trian;

interface

uses

Line, Graphics, Grids, SysUtils;

type

{ объект - Треугольник, наследует поля и методы от Линии }

TTrian = class(TLine)

protected

FX3: Integer; // координаты третьей вершины

FY3: Integer; // 1-я и 2-я наследуются от родителя

public

// объявление перекрытых родительских методов

constructor Create(ACanvas: TCanvas; AName: string;

AX, AY, AX2, AY2, AX3, AY3: Integer; AColor: TColor; AVisible: Boolean);

procedure Draw(AColor: TColor); override;

procedure Move(dX, dY: Integer); override;

procedure DrawGrid(AStringGrid: TStringGrid); override;

procedure EditGrid(AStringGrid: TStringGrid; ARow: Integer); override;

property X3: Integer read FX3 write FX3;

property Y3: Integer read FY3 write FY3;

end;

implementation

constructor TTrian.Create;

begin

inherited Create(ACanvas, AName, AX, AY, AX2, AY2, AColor, AVisible);

FClassName := 'TTrian';

FX3 := AX3;

FY3 := AY3;

end;

procedure TTrian.Draw(AColor: TColor);

begin

inherited Draw(AColor);

with FCanvas do

begin

Pen.Color := AColor;

LineTo(FX3, FY3);

LineTo(FX, FY);

end

end;

procedure TTrian.Move(dX, dY: Integer);

begin

Hide;

inc(FX, dX);

inc(FY, dY);

inc(FX2, dX);

inc(FY2, dY);

inc(FX3, dX);

inc(FY3, dY);

Show

end;

procedure TTrian.DrawGrid(AStringGrid: TStringGrid);

begin

inherited DrawGrid(AStringGrid); // перекрываем родительский метод

with AStringGrid do // и добавляем новые свойства

begin

Cells[0, 8] := 'X3';

Cells[1, 8] := IntToStr(FX3);

Cells[0, 9] := 'Y3';

Cells[1, 9] := IntToStr(FY3);

end

end;

procedure TTrian.EditGrid(AStringGrid: TStringGrid; ARow: Integer);

begin

inherited EditGrid(AStringGrid, ARow);

with AStringGrid do

case ARow of

8: FX3 := StrToInt(Cells[1, 8]);

9: FY3 := StrToInt(Cells[1, 9]);

end;

end;

end.

  1. Основной модуль oop_Lab3.

unit OOP_Lab3;

interface

uses

Windows, Messages, SysUtils, Classes, Forms, Grids, Buttons,

Dialogs, StdCtrls, Controls, ExtCtrls, ComCtrls, Graphics,

GraphObj, Point, Line, Rect, Circle, Square, Trian; { используемые модули }

type

TForm1 = class(TForm)

bbOk: TBitBtn;

bShow: TButton;

bHide: TButton;

bbExit: TBitBtn;

bbInfo: TBitBtn;

eDX: TEdit;

eDY: TEdit;

ldX: TLabel;

ldY: TLabel;

Image1: TImage;

gbTree: TGroupBox;

gbMove: TGroupBox;

gbVisual: TGroupBox;

gbMetods: TGroupBox;

Panel1: TPanel;

Tree: TTreeView;

StringGrid1: TStringGrid;

procedure FormCreate(Sender: TObject);

procedure bShowClick(Sender: TObject);

procedure bHideClick(Sender: TObject);

procedure bbOKClick(Sender: TObject);

procedure bbInfoClick(Sender: TObject);

procedure bbExitClick(Sender: TObject);

procedure TreeChange(Sender: TObject; Node: TTreeNode);

procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);

procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure eDXKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure TreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

procedure TreeDeletion(Sender: TObject; Node: TTreeNode);

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

var

Node, Node1: TTreeNode;

begin

{ создание шапки таблицы StringGrid1 }

StringGrid1.Cells[0,0]:=' Свойство:';

StringGrid1.Cells[1,0]:=' Значение:';

{ динамическое создание дерева Tree }

Node1 := Tree.Items.Add(nil, 'TGraphObj');

Node := Tree.Items.AddChildObject(Node1, 'Точка', TPoint.Create(Image1.Canvas, 'Точка', 136, 98, 0, True));

Tree.Items.AddChildObject(Node, 'Окружность', TCircle.Create(Image1.canvas, 'Окружность', 136, 98, 43, clGreen, True));

Node := Tree.Items.AddChildObject(Node, 'Квадрат', TSquare.Create(Image1.Canvas, 'Квадрат', 196, 31, 46, clAqua, True));

Tree.Items.AddChildObject(Node, 'Прямоугольник', TRect.Create(Image1.Canvas, 'Прямоугольник', 0, 0, 273, 196, clBlue, True));

Node := Tree.Items.AddChildObject(Node1, 'Прямая', TLine.Create(Image1.canvas, 'Прямая', 0, 0, 273, 196, clRed, True));

Tree.Items.AddChildObject(Node, 'Треугольник', TTrian.Create(Image1.canvas, 'Треугольник', 70, 115, 98, 165, 41, 165, clFuchsia, True));

end;

{ обработчик события, происходящего при выборе элемента дерева;

используется для отображения свойств объекта, связанного с выделенным элементом }

procedure TForm1.TreeChange(Sender: TObject; Node: TTreeNode);

begin

// если выделенный объект не является абстрактным классом

if Tree.Selected.AbsoluteIndex <> 0 then

begin

// отображение свойст объекта в StringGrid1

TGraphObj(Node.Data).DrawGrid(StringGrid1);

// прорисовка объекта

TGraphObj(Node.Data).Draw(TGraphObj(Node.Data).Color);

end

// отчистка StringGrid1

else TGraphObj(Tree.Selected.Data).ClearGrid(StringGrid1);

end;

{ обработчик нажатия клавиши в StringGrid1 }

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

begin

with StringGrid1 do

{ запрет изменения значения 0-го столбца и 1-й строки, содержащих

информацию закрытую для редактирования, а также запрет на ввод

любых символов кроме цифр в поля целочисленных свойств }

if ((Col = 0) or (Row in [1])) or ((Row > 3) and not (Key in ['0'..'9', #8]))

then Key := #0;

end;

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

if (Key = VK_RETURN) then { если в StringGrid1 нажали "Enter" }

with TGraphObj(Tree.Selected.Data) do

begin

Visible := false; // спрятать объект перед изменением свойств

// редактирование свойства в строке Row

EditGrid(StringGrid1, StringGrid1.Row);

if Tree.Selected.Text <> Name then

// изменение св-ва text выделенного элемента дерева

Tree.Selected.Text := Name;

Visible := true; // показать объект

end

end;

procedure TForm1.eDXKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

{ если нажимаем Enter, то фокус устанавливается на следующем элементе

в списке TabOrder }

if (Key = VK_RETURN) then

FindNextControl(Sender as TWinControl, true, true, false).SetFocus;

end;

{ обработчик кнопки bbOK }

procedure TForm1.bbOKClick(Sender: TObject);

begin

if Tree.Selected.AbsoluteIndex <> 0 then

begin

try

if eDX.Text <> '' then

TGraphObj(Tree.Selected.Data).Move(StrToInt(eDX.Text), 0);

if eDY.Text <> '' then

TGraphObj(Tree.Selected.Data).Move(0, StrToInt(eDY.Text));

except

{ обработка исключения, которое может возникнуть при преобразовании

строки, введённой в eDX или eDY, в целое число }

on EConvertError do MessageDlg('Неверный формат данных!', mtWarning, [mbOk], 0)

end;

TGraphObj(Tree.Selected.Data).DrawGrid(StringGrid1);

end;

end;

{ показать выбранный в Tree объект }

procedure TForm1.bShowClick(Sender: TObject);

begin

if Tree.Selected.AbsoluteIndex <> 0 then

TGraphObj(Tree.Selected.Data).Visible := true;

end;

{ скрыть выбранный в Tree объект }

procedure TForm1.bHideClick(Sender: TObject);

begin

if Tree.Selected.AbsoluteIndex <> 0 then

TGraphObj(Tree.Selected.Data).Visible := false;

end;

{ удаление выделенного елемента дерева }

procedure TForm1.TreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

if Key = VK_DELETE then // если нажали клавишу Del

if Tree.Selected.AbsoluteIndex <> 0 then

Tree.Items.Delete(Tree.Selected); // удалить объект

end;

{ обработка события происходящего при удалении элемента дерева }

procedure TForm1.TreeDeletion(Sender: TObject; Node: TTreeNode);

begin

if Node.Text <> 'TGraphObj' then // если это не абстрактный объект-родитель

begin

TGraphObj(Node.Data).Visible := false;

TGraphObj(Node.Data).Free;

end;

Node.Delete

end;

procedure TForm1.bbInfoClick(Sender: TObject);

begin

Application.MessageBox('Выполнил Фёдоров Виталий, гр. ПВ-33. ',' Информация',MB_ICONINFORMATION);

end;

procedure TForm1.bbExitClick(Sender: TObject);

begin

Application.Terminate

end;

end.

Главная форма.

Варианты заданий:

  1. Создать иерархию полупроводниковых элементов, используемых в электронных устройств.

  2. Создать иерархию классов, содержащих информацию об основных типах цифровых микросхем.

  3. Создать иерархию классов, содержащих информацию о комплектующих персонального компьютера.

  4. Создать иерархию классов, содержащих информацию об основных изделиях промышленности строительных материалов.

  5. Создать иерархию классов, представляющих собой шахматные фигуры.

  6. Создать иерархию классов, представляющих собой графические примитивы, используемые в игре «Тетрис».

  7. Создать иерархию классов, представляющих собой структурные подразделения ВУЗа.

  8. Создать иерархию классов для игры «Морской бой».

  9. Создать иерархию классов, представляющих собой транспортные средства.

  10. Создать иерархию классов, представляющих собой виды спорта.

  11. Создать иерархию классов, представляющих собой виды печатных изданий (книги, журналы и т.п.)

  12. Создать иерархию классов, представляющих собой виды графов.

  13. Создать иерархию классов, представляющих собой населенные пункты.

  14. Создать иерархию классов, представляющих собой объекты животного мира.

  15. Создать иерархию классов, представляющих собой объекты растительного мира.

Лабораторная работа №4

Программирование подпроцессов

Цель работы: приобретение навыков программирования подпроцессов с использованием классов библиотеки VCL.

Задание:

  1. Изучить основные приемы программирования подпроцессов с использованием классов библиотеки VCL.

  2. Разработать программу в соответствии с вариантом задания. Программа должна содержать 2 объекта TThread, унаследованных от общего предка, в котором должны содержаться общие для обоих процессов свойства.

Содержание отчета:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]