49796 (Построение компоненты в Builder C++), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Построение компоненты в Builder C++", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "49796"

Текст 2 страницы из документа "49796"

if ((N==true)&&( this->Width!=NewWidth)&&(this->Height!=NewHeight))

{

this->Width=NewWidth;

this->Height=NewHeight;

D=this->Width/5*4;

d=this->Width/5*3;

Marshrut->Width=this->Width;

Marshrut->Height=this->Height

Shar->Width=(D-d)/2;

Shar->Height=(D-d)/2;

Shar->Left=(this->Width-D)/2+D-Shar->Width;

Shar->Top=this->Height/2-Shar->Height/2;

this->Canvas->Font->Size=this->Height/20;

this->Canvas->TextOutA(this->Width/4,3,"Моя компонента");

this->Invalidate();//перерисовываем компоненту

N=false;//больше сюда не заходим

}

a+=0.2;//увеличиваем значение угла поворота (процесс движения)

Shar->Left=(Marshrut->Width-(D-(D-d)/2))/2+(D-(D-d)/2)/2+(D-(D-d)/2)/2*cos(a)-

Shar->Width/2;

Shar->Top=(Marshrut->Height-(D-(D-d)/2))/2+(D-(D-d)/2)/2-(D-(D-d)/2)/2*sin(a)-

Shar->Height/2;

}

}

//---------------------------------------------------------------------------

Сначала вызывается метод базового класса TCustomControl::WndProc(Message), затем устанавливаются новые размеры (если они были изменены), вызывается функция Invalidate() для перерисовки компоненты, и присваиваются новые координаты шарику.

8 Переопределение метода CanResize(int &NewWidth, int &NewHeight).

Если пользователь изменит размеры компоненты в режиме разработки, пропорционально должны измениться размеры всех объектов, из которых состоит компонента.

//---------------------------------------------------------------------------

bool __fastcall TOsnova::CanResize(int &NewWidth, int &NewHeight)

{ //изменяем

if (ComponentState.Contains(csDesigning))

{

D=this->Width/5*4; // диаметры окружностей

d=this->Width/5*3;

Marshrut->Width=this->Width; //размеры экз. класса ТMarshrut

Marshrut->Height=this->Height;

Shar->Width=(D-d)/2; //размеры экз. класса ТShar

Shar->Height=(D-d)/2;

Shar->Left=(this->Width-D)/2+D-Shar->Width;

Shar->Top=this->Height/2-Shar->Height/2;

this->Canvas->Font->Size=this->Height/20; //размер шрифта

this->Canvas->TextOutA(this->Width/4,3,"Моя компонента"); //координаты

this->Invalidate(); //перерисовываем компоненту

}

if (NewWidth!=NewHeight) NewWidth=NewHeight;

return(NewWidth, NewHeight);

}

//---------------------------------------------------------------------------

Метод CanResize() возвращает новые значения ширины (NewWidth) и высоты (NewHeight), которые затем будут переданы методу WndProc(TMessage& Message), для того, чтобы компонента рисовалась в приложении с новыми размерами.

9 Создание событий

Наиболее простая форма события — это событие, просто уведомляющее о том, что оно произошло. Например, событие OnClick, которое присутствует в большинстве визуальных компонентов, имеет только один параметр — Sender:

void fastcall TForml::FormClick(TObject *Sender).

Этот тип события определяется в VCL как TNotifyEvent.

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

воспользоваться типом события TNotifyEvent. OnMyClick, событие TOsnova — простое событие уведомления. Оно объявляется следующим образом:

__property TNotifyEvent OnMyClick = {read=FOnMyClick, write=FOnMyClick};

Каждое событие должно иметь виртуальный метод, который используется внутри компоненты, чтобы сообщить ей о своем возникновении. Такие методы объявляются виртуальными (чтобы классы-наследники могли получить к ним доступ) и в защищенном разделе.

Виртуальный метод, сообщающий о возникновении события OnMyClick, называется DoOnMyClick():

//---------------------------------------------------------------------------

void __fastcall TOsnova::DoOnMyClick()

{

if (FOnMyClick)

FOnMyClick(this);

}

//---------------------------------------------------------------------------

Сначала проверяется, был ли событию назначен обработчик. Если обработчик события был назначен, то вызывается функция, указатель на которую расположен в поле FOnMyClick, куда передается в качестве параметра указатель на компонент (this). Это событие будет отражено на вкладке Events в окне Инспектора Объектов.

При двойном клике Builder сгенерирует следующий код:

//---------------------------------------------------------------------------

void __fastcall TForm1::Osnova1MyClick(TObject *Sender)

{

//код обработчика события

}

//---------------------------------------------------------------------------

10 Тестирование компоненты

Для тестирования компоненты начнём новый проект (FileNewApplication).

Добавим к проекту (ProjectAdd to Project) файлы Osnova.cpp, Marshrut.cpp и Shar.cpp. В конструкторе формы создадим объект нашего класса

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

TOsnva *Osnova;

Osnova=new TOsnova(this);

Osnova->Parent=this;

}

//---------------------------------------------------------------------------

Теперь все изменения в компоненте мы сразу сможем увидеть при запуске этого проекта.

11 Регистрация компоненты

Компонента регистрируется функцией Register(), которая автоматически генерируется C++ Builder. Ключевое слово namespace устанавливает локальность имён данной процедуры регистрации. После этого ключевого слова следует имя файла, содержащего компоненту. В процедуре регистрации Register первый оператор создаёт массив регистрируемых компонентов classes типа TComponentClass и заносит его в регистрируемую компоненту. Следующий оператор регистрирует функцией RegisterComponents компоненты, занесённые в classes (второй параметр функции) на странице Samples (второй параметр).

//---------------------------------------------------------------------------

namespace Osnova

{

void __fastcall PACKAGE Register()

{

TComponentClass classes[1] = {__classid(TOsnova)};

RegisterComponents("Samples", classes, 0);

}

}

//---------------------------------------------------------------------------

12 Инсталляция компоненты

Для инсталляции компоненты выбираем меню Component, Install Component.

В появившемся окне выбираем вкладку Into new package (в новый пакет), вводим имя пакета (APPKOsnova) и нажимаем ОК. Появляется окошко с предложением инсталлировать пакет.

Отвечаем No, так как наш пакет полностью ещё не собран в него не включены классы TMarshrut и ТShar. В окне Диспетчера Пакетов (Package Manager) выбираем Add, Add Unit и добавляем файлы Marshrut.cpp и Shar.cpp

После компиляции можно инсталлировать нашу компоненту.

Деинсталлировать компоненту можно, выбрав вкладку Project > Options >Remove.

13 Проверка готовой компоненты

Для проверки работоспособности компоненты начнём новый проект (FileNewApplication).

Выбираем на палитре компонентов вкладку Samples и переносим нашу компоненту на форму.

Потянув за рамку, мы можем менять размеры компоненты

Добавим на форму две кнопки и в обработчике события OnClick напишем код

//---------------------------------------------------------------------------

void __fastcall TForm1::Scororty_plusClick(TObject *Sender)

{

Form1->Osnova1->Skorosty-=5;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Scororty_minusClick(TObject *Sender)

{

Form1->Osnova1->Skorosty+=5;

}

//---------------------------------------------------------------------------

и запустим проект. При каждом нажатии на кнопку Scororty_plus скорость вращения будет увеличиваться, а при нажатии на кнопку Scororty_minus уменьшаться.

Список используемой литературы

1. А.Я. Архангельский «Программирование в С++ Builder 6».

2. К.Рейсдорф, К.Хендерсон «Borland C++ Builder. Освой самостоятельно

за 21 день».

3. Теллес М. « Borland C++ Builder. Библиотека программиста(1998)»

4. Ч. Калверт, К. Рейсдорф «Borland C++ Builder».

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4144
Авторов
на СтудИзбе
666
Средний доход
с одного платного файла
Обучение Подробнее