Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Описание свойств и процедур компонента.

ЗАМЕЧАНИЕ РУКОВОДИТЕЛЯ

 

ОГЛАВЛЕНИЕ

 

1.ВВЕДЕНИЕ………………………………..…………………………...…... 2. ТЕХНИЧЕСКОЕ ЗАДАНИЕ ………………………….………………….. 2.1) Исходные данные ……………………………..……………..……. 2.2) Выбор класса предка……………………………………………… 2.3) Описание свойств и процедур.…………………………………… 2.4) Интерфейс пользователя……………………………..…………… 3.ЗАКЛЮЧЕНИЕ………………………………………………….……......... 4.СПИСОК ЛИТЕРАТУРЫ…………………………………………………. 5.ПРИЛОЖЕНИЕ…………………………………………………………….      

ВВЕДЕНИЕ

В настоящее время среди широкого круга пользователей популярна система объектно-ориентированного программирования Delphi, основу которой составляет язык Object Pascal. Delphi позволяет быстро создавать приложения различной степени сложности на основе применения технологии визуального программирования.

По сравнению с традиционными способами программирования ООП обладает рядом преимуществ. Главное из них заключается в том, что эта концепция в наибольшей степени соответствует внутренней логике функционирования операционной системы Windows. Программа, состоящая из отдельных объектов, отлично приспособлена к реагированию на события, происходящие в ОС. К другим преимуществам ООП можно отнести большую надежность кода и возможность повторного использования отработанных объектов.

Использование объектно-ориентированного подхода позволило справиться с рядом проблем индустрии разработки программного обеспечения. Ранее многие программы создавались "с нуля", повторное использование библиотек подпрограмм было затруднено однозначностью записанных в них алгоритмов. Такой подход был дорогостоящим, многие ранее сделанные наработки не могли быть применены в новых проектах. Методология ООП позволила создавать достаточно универсальные библиотеки классов объектов, чтобы их можно было многократно и различными способами использовать при решении многих задач. Это привело к снижению стоимости разработок, ускорению выхода новых программных продуктов, созданию более сложных устойчивых программных систем и бурному развитию отрасли.

В данном курсовом проекте создан визуальный компонент с заранее определенными свойствами и методами. Также было разработано тестовое приложение для демонстрации доступных событий.

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

Исходные данные.

· загруженная изображение разбивается на определенное число кусков

· куски изображения перемешиваются на рабочем поле в случайном порядке

· при правильном расположении куска пользователем происходит автовыравнивание

· при правильном расположении всех кусков изображения - выдается сообщение пользователю о победе

 

Выбор класса предка.

 

Цель курсовой работы состоит в создании компонента логической игры пазл. В качестве класса предка компонента выбран класс TCustomControl, так как компонент нуждается в дескрипторе окна.

Входными данными разрабатываемого компонента, являются:

· загружаемое изображение

· количество кусков изображения

Описание свойств и процедур компонента.

Директивы private, protected, public и published предназначеные для разграничения доступа к элементам класса. Расположив директивы по порядку, будет видно их применение:

Private. Поля, свойства и методы, описанные в разделе private, называются личными или закрытыми. Сюда помещаются элементы, которые выполняют в объекте специфичные функции. Поэтому целесообразно скрыть от других частей программы, либо такие элементы, для которых по ряду причин не следует разрешать доступ извне объекта.

Protected. Элементы класса, объявленные в разделе protected доступны только в классах, порожденных от исходного. Здесь размещаются элементы, которые важны лишь для функционирования объектов данного класса и его потомков. Обычно в секцию protected помещаются описания методов класса.

Public. Элементы, описанные в разделе public - общедоступны. Они могут быть использованы всюду в программе.

Published. Поля, свойства и методы, описанные в разделе published, называются опубликованными. Их область видимости эквивалентна области видимости общедоступных описаний. Отличие состоит в том, что информация о них, за исключением ряда типов, например real, на этапе проектирования программы помещается в инспектор объектов.

Интерфейс пользователя

Интерфейс разработанного компонента прост.

 

 

Рисунок 2.4.1

 

1. Рабочее поле с загруженным изображением.

2. Флажок начала игры.

3. Элементы управления количеством кусков изображения.

4. Загрузка другого изображения.

При установке флажка «Разрезать» происходит разрезание картинки на заданное количество кусков по вертикали и горизонтали.

При правильной установке куска изображения происходит автовыравнивание элемента.

При правильном расположении всех кусков изображения выдается сообщение пользователю о победе, после чего при желании пользователь может начать новую игру.

 

ЗАКЛЮЧЕНИЕ

Результатом курсового проектирования стало применение практических навыков в области объектно-ориентированного программирования. Была разработана логическая игра «Пазл». Для проверки работоспособности компонента было разработано тестовое приложения, демонстрирующее возможности компонента.

Курсовой проект был разработан с использованием среды визуального программирования Delphi 7.

 

СПИСОК ЛИТЕРАРУРЫ

 

1. Голованов М., Веселов Е. – Создание компонента в среде Delphi. Руководство разработчика, СПб: БХВ-Питербург, 2004. 233 с.

2. Фаронов В. В. Delphi 4. Учебный курс. – М.: Издательство «Нолидж», 1998.

3. Бобровский С. И. Технологии Delphi, учебный курс. – Спб.: Питер, 2007. – 720с.: ил.

4. З.П.Дарахвелидзе, Е.Марков. Delphi — среда визуального программирования. СПб: BHV-Санкт-Петербург, 1996. 352 с.

 

 

ПРИЛОЖЕНИЕ

Листинг программы

unit Pazle;

 

interface

 

uses

windows, SysUtils, Classes, Controls, graphics, Dialogs, forms, StdCtrls,

Messages, ExtCtrls;

 

type

TPazle = class(TCustomControl)

private

FColCount: integer;

FRowCount: integer;

FCut: boolean;

FBitmap:TBitmap;

procedure SetColCount(const Value: integer);

procedure SetRowCount(const Value: integer);

procedure SetCut(const Value: boolean);

procedure SetBitmap(const Value: TBitmap);

protected

procedure Paint; override;

procedure CheckRight;

public

Complete:boolean;

constructor Create(AOwner: TComponent); override;

destructor Destroy; override;

 

published

 

property Bitmap: TBitmap read FBitmap write SetBitmap;

property ColCount: integer read FColCount write SetColCount;

property RowCount: integer read FRowCount write SetRowCount;

property Cut: boolean read FCut write SetCut;

end;

 

TPiece = class(TCustomControl)

private

FX: Integer;

FY: Integer;

protected

procedure WMNCHitTest(var Message:TMessage); message WM_NCHITTEST;

procedure Paint; override;

function IsOnPlace:Boolean;

procedure WMMOVE(var Message:TMessage); message WM_MOVE;

public

property X:Integer read FX write FX;

property Y:Integer read FY write FY;

 

published

end;

 

procedure Register;

 

implementation

 

uses Variants, Types;

 

procedure Register;

begin

RegisterComponents('Game', [TPazle, TPiece]);

end;

var

lPiece:TPiece;

 

{ TPazle }

 

 

procedure TPazle.CheckRight;

var

i:integer;

a:boolean;

begin

a:=true;

for i:= ComponentCount - 1 downto 0 do

begin

with Components[i] as TPiece do

begin

a:=a and IsOnPlace;

end;

end;

if a then

Complete:=true;

end;

 

constructor TPazle.Create(AOwner: TComponent);

begin

inherited;

width:= 300;

Height:= 300;

color:=clGray;

FBitmap:=TBitmap.Create;

FColCount:= 2;

FRowCount:= 2;

Cut:= False;

end;

 

destructor TPazle.Destroy;

begin

FBitmap.Free;

inherited;

end;

 

procedure TPazle.Paint;

begin

inherited;

if not FCut then

Canvas.StretchDraw(ClientRect, FBitmap);

canvas.Brush.Color:=clBlack;

Canvas.FrameRect(ClientRect);

if Complete and lPiece.IsOnPlace then

ShowMessage('Сейчас рисунок собран правильно!');

Complete:=false;

end;

 

procedure TPazle.SetBitmap(const Value: TBitmap);

begin

FBitMap.Assign(Value);

Invalidate;

end;

 

procedure TPazle.SetColCount(const Value: integer);

begin

FColCount:= Value;

end;

 

procedure TPazle.SetCut(const Value: boolean);

var

c, r: integer;

dx,dy:Integer;

begin

FCut:= Value;

if Cut then

begin // Нарезаем кусочки

dx:=ClientWidth div ColCount;

dy:=ClientHeight div RowCount;

for c:= 0 to ColCount - 1 do

for r:= 0 to RowCount - 1 do

begin

lPiece:= TPiece.Create(self);

lPiece.Parent:= self;

lPiece.Width:=dx;

lPiece.Height:=dy;

lPiece.X:=C;

lPiece.Y:=R;

lPiece.Left:= Random(ClientWidth);

lPiece.Top:= Random(ClientHeight);

end;

end

else

begin

for c:= ComponentCount - 1 downto 0 do

Components[c].Free;

end;

Invalidate;

end;

 

procedure TPazle.SetRowCount(const Value: integer);

begin

FRowCount:= Value;

end;

 

{ TPiece }

 

function TPiece.IsOnPlace: Boolean;

begin

Result:=(Left=(X*ClientWidth)) and (top=(Y*ClientHeight));

end;

 

procedure TPiece.Paint;

var dx, dy:Integer;

begin

inherited;

Canvas.Brush.Color:=clBlack;

dx:=TPazle(Owner).FBitmap.Width div TPazle(Owner).ColCount;

dy:=TPazle(Owner).FBitmap.Height div TPazle(Owner).RowCount;

Canvas.CopyRect(ClientRect,TPazle(Owner).FBitmap.Canvas, Rect(dx*x,dy*y, dx*(x+1), dy*(y+1)));

Canvas.FrameRect(ClientRect);

end;

 

procedure TPiece.WMMOVE(var Message: TMessage);

var

xx,yy:integer;

begin

xx:=X*ClientWidth;

yy:=Y*ClientHeight;

if abs(Message.LParamLo-xx)<=8 then Left:=xx; //автовыравнивание

if abs(Message.LParamHi-yy)<=8 then top:=yy; //

IsOnPlace;

TPazle(owner).CheckRight;

end;

 

procedure TPiece.WMNCHitTest(var Message: TMessage);

begin

Message.Result:=

DefWindowProc(Handle, Message.Msg, Message.WParam, Message.LParam);

if Message.Result=HTCLIENT then Message.Result:=HTCaption;

end;

end.



<== предыдущая лекция | следующая лекция ==>
Карта обеспеченности литературой. Кафедра гражданского, арбитражного и административного процессуального права | 
Поделиться с друзьями:


Дата добавления: 2016-11-19; Мы поможем в написании ваших работ!; просмотров: 279 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Два самых важных дня в твоей жизни: день, когда ты появился на свет, и день, когда понял, зачем. © Марк Твен
==> читать все изречения...

2216 - | 2044 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.