Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++_навч_пос14_new.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.86 Mб
Скачать

Код компоненту tButtonEx Файл ButtonEx.H

//файл ButtonEx.h з класом компоненту TButtonEx

#ifndef ButtonExH

#define ButtonExH

#include <SysUtils.hpp>

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

//клас компоненту TButtonEx, який успадковується від TButton

//макрос PACKAGE вказує, що клас може бути імпортований і експортований з файлу bpl

class PACKAGE TButtonEx : public TButton

{

private:

bool FState;//поле для збереження значення властивості State

void __fastcall SetState(bool value);//метод запису властивості State

protected:

public:

__fastcall TButtonEx(TComponent* Owner);//конструктор

DYNAMIC void __fastcall Click(void);//динамічний метод Click

__published://розділ з властивостями, які показуються у Object Inspector

//оголошення властивості State логічного типу

//читання з поля FState, запис методом SetState, по замовчуванню true

__property bool State = { read=FState, write=SetState, default=true };

};

#endif

Файл ButtonEx.Cpp

//файл ButtonEx.cpp з визначенням методів класу TButtonEx

#include <vcl.h>

#pragma hdrstop

#include "ButtonEx.h"

#pragma package(smart_init)

//використовується для перевірки, чи немає чисто віртуальних функцій

static inline void ValidCtrCheck(TButtonEx *)

{

new TButtonEx(NULL);

}

//конструктор

__fastcall TButtonEx::TButtonEx(TComponent* Owner): TButton(Owner)

{}//пустий

namespace Buttonex//простір імен Buttonex

{

void __fastcall PACKAGE Register()//функція реєстрації компоненту

{

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

RegisterComponents("Samples", classes, 0);//реєструє на вкладці Samples

}

}

//визначення методу SetState, який установлює значення властивості

void __fastcall TButtonEx::SetState(bool value)

{

//якщо поле FState не рівне value, то присвоїти value

if(FState != value) {FState = value;}

}

//визначення методу Click, який уточнює реакцію на подію OnClick

void __fastcall TButtonEx::Click(void)

{

//якщо FState істина, то викликати SetState(false), інакше SetState(true)

(FState)?this->SetState(false):this->SetState(true);

TButton::Click();//виклик методу базового класу

}

6 Створення dll

Постановка задачі: створити бібліотеку dll, яка містить простий клас.

Послідовність виконання:

Створюємо бібліотеку DLL:

1 File/New/Other/DLL Wizard

2 Source Type: C++

3 Забрати прапорець з: Use VCL, Ok

4 Добавляємо файл заголовків File1.h: File/New/Other/Header File

5 File/Save/File1.h

6 Project/Add To Project.../File1.h

7 Вставте у файл File1.h код:

__declspec( dllexport ) class My

{

private:

double x;

public :

My();

double RetSqr();

};

8 Добавте до Unit1.cpp:

#include "File1.h"

а також реалізацію методів:

My::My()

{

x=2;

}

double My::RetSqr()

{

return x*x;

}

9 Компілюємо: Project/Build Project1

Створюємо додаток, який використовує DLL:

10 Створюємо додаток: File/New/Application

11 Помістіть на форму поле і кнопку.

12 Добавте до модуля cpp:

#include "File1.h"

13 Добавляємо до проекту бібліотеку: Project/Add To Project.../Project1.lib

14 Добавте в клас TForm1 в розділ private:

My *obj;

15 В конструктор класу TForm1::TForm1 вставте код:

obj = new My();

16 В метод TForm1::Button1Click вставте код:

{

Edit1->Text=AnsiString(obj->RetSqr());

}

17 File/Save Project As... Назвіть модуль Unit2, а проект Project2.

18 Run.

Повинен появитись результат: 4.