Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Казалось бы мелочь, но как?? или создание своего класса!

413
09 октября 2003 года
lunaplus
93 / / 04.10.2003
Привет всем!

Вот такой наивынй вопрос. Хочу создать класс для хранение узла определенной сложной структуры данных. В общем класс! Как в билдере это сдлеть
То есть с классами их панели компонент все яснее ясного, драг и дроп как говориться. А вот свой , просто с плюсный класс??

С Уважением, Александра!
487
10 октября 2003 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by lunaplus
Привет всем!

Вот такой наивынй вопрос. Хочу создать класс для хранение узла определенной сложной структуры данных. В общем класс! Как в билдере это сдлеть
То есть с классами их панели компонент все яснее ясного, драг и дроп как говориться. А вот свой , просто с плюсный класс??

С Уважением, Александра!



Советую по своему рецепту:

Если хочешь сделать VCL компонент чтобы добавить его в палитру билдеровских компонентов, для начала пишешь сам класс! Отлаживаешь его - чтобы все работало без изъяна.

Затем следующие действия:
В билдеровском меню выбираешь контекстное меню Component->New Component

В появившемся диалоге указываешь:
Ansector Type: - либо родительский класс твоего класса (если он child) либо TComponent - ежели пишешь класс с нуля.
Class Name - имя своего класса
Palette Page - Имя закладки в палитре компонентов - можешь укзать либо сществующую, либо создать свою.
Unit File Name: - имя cpp-шника куда будет сгенерен код компонента.

Будет создан следующий файл:
К примеру я назвал компонент TComponent1:

CPP:
//---------------------------------------------------------------------------
#include <basepch.h>

#pragma hdrstop

#include "Component1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//

static inline void ValidCtrCheck(TComponent1 *)
{
new TComponent1(NULL);
}
//---------------------------------------------------------------------------
__fastcall TComponent1::TComponent1(TComponent* Owner)
: TComponent(Owner)
{
}
//---------------------------------------------------------------------------
namespace Component1
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TComponent1)};
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
H:
//---------------------------------------------------------------------------

#ifndef Component1H
#define Component1H
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
//---------------------------------------------------------------------------
class PACKAGE TComponent1 : public TComponent
{
private:
protected:
public:
__fastcall TComponent1(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
#endif

Вот теперь делаешь следующее:

В h файл со спокойной душой вставляешь хидерсвоего VCL класса.


А вот с CPP поступаешь следующим образом:
Оставляешь обязательно:

//---------------------------------------------------------------------------
#include <basepch.h>

#pragma hdrstop

#include "Component1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//

static inline void ValidCtrCheck(TComponent1 *)
{
new TComponent1(NULL);
}
//---------------------------------------------------------------------------

и

//---------------------------------------------------------------------------
namespace Component1
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TComponent1)};
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------

А вот между этими кусками втыкаешь код своего класса! Обязательно между ними!

(в свое время много мучился с этим делом на 4 билдере - там как раз от перемены мест слагаемых начинались глюки).

Когда cpp и h файлы готовы, делаешь следующее:

Лезем в билдере в контекстное меню:

Component->Install Component

В появившемся диалоге:

Закладка Into existing package - устанавливает компонент в существующий пэкэдж компонентов.

Закладка Into new package - устанавливает компонент в новый пэкэдж компонентов.

Выбираешь либо то, либо это,
Unit File Name - выбираешь cpp-шник.

А дальше все просто - в появившемся окошке жмешь compile - а потом install.

Все твой компонент будет добавлен в палитру.

ВАЖНО!

После установки компонента желательно чтобы
.bpl и .bpi файлы валялись в билдеровской директории в папке projects\bpl projects\lib (для сокращения геморроя).
Потом обязательно h файл своего компонента закидываешь в директорию, которая доступна для компилятора (я кидаю в билдеровскую директорию include\vcl) и все obj файлы тоже должны находиться в доступном месте - я их направляю в билдеровскую директорию lib\obj.

Вроде все. Может чего напутал, но сам через день два буду добавлять свой компонент - ежели чего не так сделал - исправлю и сообщю подробности!
:D

413
10 октября 2003 года
lunaplus
93 / / 04.10.2003
Цитата:
Originally posted by ddnh_bc


Советую по своему рецепту:



Спасибо, ты все просто супер описал, буду пробовать.Но для этого нужно решить вначале первую проблему- как оттестироать класс, Если после добавления к проекту файлов Node.cppp b node.h со следующим содерижмим
class CNode :public TObject
{
protected :
int ID;
public :
int getID(){return this->ID;}
}


прокет просто не компилисться((
Пишет [C++ Error] Unit2.h(13): E2176 Too many types in declaration
что это моет быть?

1
10 октября 2003 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by lunaplus


Спасибо, ты все просто супер описал, буду пробовать.Но для этого нужно решить вначале первую проблему- как оттестироать класс, Если после добавления к проекту файлов Node.cppp b node.h со следующим содерижмим
class CNode :public TObject
{
protected :
int ID;
public :
int getID(){return this->ID;}
}


прокет просто не компилисться((
Пишет [C++ Error] Unit2.h(13): E2176 Too many types in declaration
что это моет быть?


Во первых:

 
Код:
class CNode :public TObject
  {
  protected :
             int ID;
  public :
             int getID(){return this->ID;}
  };

Должно быть вот так! Т.е. пропущена точка с запятой. Это как раз и причина появления ошибки.
Во вторых: желательно иметь конструктор по умолчанию. Или пустой конструктор.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог