Методические указания к выполнению работы




Практическое занятие № 3

Визуальное программирование

Цель работы: ознакомление с технологий визуального программирования в системе программирования Delphi

Подготовка к работе

Изучить по методическим указаниям к работе и приведенной ниже литературе, следующие вопросы:

l понятия компонента и элемента управления в Delphi;

l создание новых компонентов пользователя и включение их в палитру компонентов Delphi;

l иерархия классов библиотеки визуальных компонентов (VCL - VisualComponentsLibrary) Delphi;

l Назначение, основные свойства, методы и события классов:

l TObject - базовый класс всех классов VCL;

l TComponent, TControl, TGraficControl - базовые классы, предназначенные для разработки неоконных элементов управления. классов,

Программа работы

1. Получить вариант задания у преподавателя (см, таблица 3), создать рабочую папку для хранения нового проекта, запустить Delphi и создать модуль MyComponent для объявления нового компонента.

2. Создать класс графического элемента управления TMyComponent.

3. Добавить в описание компонента свойства, отражающие состояние компонента StateMyComponent и/или его ориентацию Orientation.

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

5. Создать новое приложение Application1 и добавить в проект разработанный модуль. Создать в приложении разработанный компонент, установить значения нужных свойств и проверить его поведение после запуска приложения на выполнение.

6. Зарегистрировать разработанный компонент в Delphi и поместить его в палитру компонентов в раздел MyComponent.

7. Сделать выводы и оформить отчет по лабораторной работе. (в отчете представить текст программы Application1 и модуля MyComponent.

Таблица 3

№ вар. Графический элемент управления Класс Изображение
Кнопки   Действия
1. Светодиод TLightDiod Вкл, Выкл Изменяет цвет
2. Сегмент индикатора TSegment Больше, Меньше + _
3. Лампочка TLamp Вкл, Выкл Светится, не светится
4. Тумблер TSwitch   При наведении мыши меняет положение
5. Реостат прямоугольный (плавное изменение) TVar Влево Вправо При нажатии кнопок перемещается на одно деление
6. Переключатель (фиксированные положения) TSwitching Больше Меньше При нажатии перемещается на фиксированное значение
  Нагреватель прямоугольный Tnagr Три позиции В зависимости от позиции меняет цвет
  Экран мобильного телефона TMob Память Звонок Высвечивается набранный номер. Меняет цвет
  Экран монитора TMon ВклВыкл Высвечивается введенный текст, гасится экран
  Штора окна TStor Верх Середина Низ Открытие шторы на соответсвующую часть окна
  Индикатор загрузки TInd Окно ввода, кнопка Загрузка В зависимостиот % перемещается полоска индикатора
  Флюгер (вид сверху) TFlug Задание направления ветра С, СВ,СЗ и тд Поворот флюгера
  Маяк TMajak Кнопки режима 1 2 3 Не светит, один луч, два луча.
  Двери TDwer Кнопки открзакр переключатель дверь1 дверь2 Закрытие открытие каждой двери
  Ромб TRomb Кнопки вправо влево Перемещение ромба
  Круг TKrug Кнопка больше, меньше, цвет Изменение диаметра и цвета
  Указатель уровня TUkUr Вертикальный указатель и окно ввода  
  Панель источника питания TIstpit Окно ввода, светодиоды от сети, вкл., от батареи Напр есть (вкл) Напр> 200 от сети Напр> 200 от батар
  Светофор   Три лампы и кнопка переключения Меняется цвет через желтый
  Перемещение магнитных головок по компакт-диску   Окно ввода, круг диска, прямоугольник головок. Перемещается по прямой на расстояние, пропорционально введенному номеру дорожки
  Панель прибора   Окно ввода. Кнопка вкл индикатор вкл и уровня сигнала При нажатой кнопке горит индикатор вкл, при превышении заданного значения загорается индикатор мах
  Трехпрограммный радиоприемник.   Окно ввода три разноцветных светодиода В зависимости от введенной частоты грот один из светодиодов или ни один
  Пульт телевизионный   Две кнопки каналов, одна - выкл Экран пуст или две разных заставки
  Кодировщик   Окно ввода, два светодиода В зависимости от цифры 0-3 высвечивается двоичный код (1 –горит)
  Имитатор эмоций   Кнопки безразличие, злость, радость Изменяется пиктограмм и цвет

Контрольные вопросы

1. Где хранятся визуальные компоненты Delphi?

2. Какие способы создания новых компонентов вы знаете?

3. Что такое компонент?

4. Назовите базовые классы для проектирования компонентов?

5. На какие два типа можно разделить компоненты?

6. Куда помещаются зарегистрированные компоненты?

7. В чем заключается процедура регистрации?

8. С какой целью используется свойство Canvas компонентов

9. Какие компоненты свойства Canvas вы знаете? Назовите их назначение и их основные свойства.

10. Перечислите последовательность действий при «ручном» создании компонента для размещения его на оконном средстве управления?

11. Назовите различия между владельцем и родителем компонента.

 

Методические указания к выполнению работы

К п.1. Для создания нового модуля выберите пункт меню File|New|Unit. Затем создайте заголовок модуля и шаблон нового компонента – потомка класса TGraphicControl:

unitMyComponent;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Controls;

type

TMyComponent = class(TGraphicControl)

private

{ Private declarations }

protected

{ Protected declarations }

public

{ Public declarations }

published

{ Published declarations }

end;

 

implementation

end.

Компонентом может быть почти любой элемент программы, которым можно управлять во время разработки. Создание компонента означает получение нового класса из существующего класса. Класс TComponent является общим предком каждого компонента в иерархии VCL (1). TComponent обеспечивает минимум свойств и событий, необходимых для компонента. Компоненты в Delphi могут быть визуальные и невизуальные. Невизуальные компоненты должны быть потомками класса TComponent. Напротив, класс TControl (потомок TComponent) является базовым для создания визуальных элементов управления.

Рисунок 1

Визуальные компоненты в свою очередь могут быть оконные и графические. Оконные элементы управления в VCL это объекты, которые появляются во время выполнения и с которыми пользователь может взаимодействовать. Каждое оконное средство управления имеет дескриптор окна, доступный через его свойство Handle, которое позволяет Windows идентифицировать и работать с данным элементом управления. При использовании VCL дескриптор позволяет элементу управления принимать фокус ввода, и может передаваться функциям WindowsAPI. Все оконные элементы управления являются потомками класса TWinControl.

Если элемент управления не должен принимать фокус ввода, его лучше сделать графическим средством управления. Графическое средство управления подобно оконным элементам управления, но не имеет какого-либо дескриптора окна, и поэтому потребляет меньшее количество системных ресурсов. Хотя это средство управления не может принимать фокус ввода, оно может реагировать на сообщения мыши. Delphi поддерживает создание пользовательского графического средства управления через компонент TGraphicControl. Компонент TGraphicControl это абстрактный класс, унаследованный от TControl и который предоставляет Вам холст для рисования (свойство Canvas) и обрабатывает сообщения WM_PAINT; все для того чтобы можно было переопределить метод Paint.

К п.2. Конструктор Create объявлен в классе TComponent как виртуальный метод. Перекройте конструктор класса Create и при необходимости измените в нем значения некоторых наследуемых свойств. В классах-наследниках TControl и TGraficControl он перекрывается, но не перегружается, поэтому его заголовок имеет неизменный вид:

 

constructorTMyComponent.Create(AOwner: TComponent);

begin

inherited; // обязательная инициализация наследуемой части

.... // инициализация объекта класса-потомка

end;

 

В качестве параметра конструктору передается указатель на владельца компонента. Этот параметр, при инициализации наследуемой части, присваивается свойству Owner компонента. Это одна из причин, почему необходимо вызывать одноименный метод класса-предка. Таким образом, после создания экземпляра класса свойство Owner указывает на владельца данного компонента.

Владелец компонента – компонент, при уничтожении которого уничтожится и данный компонент. Этим и ограничивается связь с владельцем компонента. Форма является владельцем всех расположенных на ней компонентов. В свою очередь объект TApplication является владельцем всех форм.

К п.3. После изменения свойств состояния компонента его изображение должно измениться, поэтому необходимо выполнить его перерисовку, вызвав один из взаимозаменяемых наследуемых методов Repaint или Refresh (TControl).

К п.4. Каждый создаваемый графический элемент управления, как правило, имеет свое изображение, поэтому необходимо при описании класса перекрывать виртуальный метод Paint. Для прорисовки изображения используется свойство Canvas (тип TCanvas).

Цвет и стиль изображения задаются свойствами CanvasPen (перо) и Brush (кисть) (соответственно типы TPen и TBrush).

Само изображение формируется при помощи методов Canvas: Ellipse (нарисовать окружность или эллипс), Rectangle (прямоугольник) и т.д. Например:

 

procedure Paint; override;

begin

with Canvas do begin

Pen.Color:=clRed; // задать цвет пера

Pen.Width:=2; // задать ширину пера

Brush.Color:=clBlue; // задать цвет кисти

Ellipse(0,0,10,10); // нарисовать круг

end;

end;

Константы цвета определены в модуле ExtCtrls.

Для получения более подробной информации о методах и свойствах перечисленных типов данных обратитесь к справочной системе Delphi.

К п.5. Для создания нового приложения выберите пункт меню File|New|Application. Для добавления модуля к проекту выберите пункт меню Project|Addtoproject и выберите в появившемся диалоговом окне файл модуля MyComponent.pas.

Для проверки работоспособности неустановленного компонента необходимо:

l прибавить название модуля компонента к предложению uses модуля формы;

l добавить в раздел public формы переменную типа компонента;

l создать обработчик события OnCreate формы. Для этого щелкните мышкой на изображении формы, затем в окне инспектора объектов выберите закладку Events и сделайте двойной щелчок на строке OnCreate. Delphi автоматически предоставит вам шаблон обработчика сообщения для выбранного события;

l создать компонент в обработчике OnCreate формы. Для этого нужно вызвать конструктор компонента и передать ему параметр, определяющий владельца компонента. В данном случае владельцем будет сама форма. Это значит, что в качестве параметра можно передать значение Self. При использовании в методе, Self - это ссылка на объект, который содержит метод. В этом случае, в обработчике OnCreate формы, Self указывает на форму.

l установить значение свойства Parent компонента. Установка свойства Parent это всегда первое необходимое действие после создания элемента управления. Parent – родительский компонент-контейнер, на котором располагается данный компонент. Контейнерами являются оконные компонент, такие, как формы, панели и другие.

l установить любые другие свойства компонента.

Например:

 

unitMainF;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, MyComponent;

 

type

TForm1 = class(TForm)

procedureFormCreate(Sender: TObject);

private

{ Private declarations }

public

MyComponent1: TMyComponent;

{ Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.FormCreate(Sender: TObject);

begin

MyComponent1:=TMyComponent.Create(Self);

MyComponent1.Parent:=Self;

MyComponent1.Left:=100;

MyComponent1.Visible:=True;

end;

Кп.6. Регистрация - это процесс, который сообщает Delphi, какие компоненты прибавить к его библиотеке компонентов, и на какой странице Палитры компонентов они должны появиться. Для регистрации компонента, необходимо:

l добавьте процедуру Register без параметров в интерфейсную часть модуля компонента:

procedure Register;

l напишите тело процедуры Register в разделе implementation модуля. RegisterComponents это процедура, которая получает два параметра: название страницы Палитры компонентов и набор типов компонентов:

procedure Register;

begin

{ поместитькомпонентынастраницу Samples }

RegisterComponents('Samples', [TCustom1, TCustom2]);

{ поместить компоненты на новую страницу }

RegisterComponents('MyPage', [TMyComponent1, TMyComponent2]);

end;

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: