Андрей |
Отправлено: 04.03.2005, 11:33 |
|
Не зарегистрирован
|
Такой вопрос возник при написании компонента
Есть компонент
namespace Siemensopc
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(SiemensOPC)};
RegisterComponents("Samples", classes, 0);
}
}
переопределены классы
class PACKAGE NewProperty : public TStringProperty{
private:
protected:
public:
void __fastcall GetValues(Classes::TGetStrProc Proc);
TPropertyAttributes __fastcall GetAttributes(void);
};
//---------------------------------------------------------------------------
class PACKAGE TTagEditor: public TComponentEditor{
private:
protected:
public:
int __fastcall GetVerbCount(void);
AnsiString __fastcall GetVerb(int Index);
void __fastcall ExecuteVerb(int Index);
};
- для переопределения и создания компонент Едитора и подключена в проект designide.bpi
Вопрос — Где проводить регистрацию
RegisterPropertyEditor(*((GetPropInfo(__typeinfo(SiemensOPC), "ServerName"))->PropType),__classid(SiemensOPC),"ServerName",__classid(NewProperty));
RegisterComponentEditor(__classid(SiemensOPC),__classid(TTagEditor));
- нового Проперти Едитора и КомпонентЕдитора?? И если в namespace Siemensopc то как потом приложению сказать, чтобы он вслед за компонентом не тянул designide.bpi ?? Иначе получаеться, что при попытке компиляции он ищет все virtual классов TComponentEditor и TStringProperty и не может их найти
|
|
olegenty |
Отправлено: 04.03.2005, 12:20 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ты определись, что переопределяешь/добавляешь. а для того, чтобы дизайнерские штучки не тянулись, разбей пакет на Runtime only и Design Time only, и будет тебе счастье...
|
|
Андрей |
Отправлено: 04.03.2005, 12:39 |
|
Не зарегистрирован
|
Подробнее пожалуйста или ссылку на документацию
Как тогда зарегестрировать для пакета новые
RegisterPropertyEditor
RegisterComponentEditor
|
|
olegenty |
Отправлено: 04.03.2005, 13:57 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Создать для Property- и ComponentEditor отдельный пакет, Design time only, заинклудить туда Runitme only пакет с компонентом, да и
1. Объявить и определить редакторы компоенента и свойств.
2. Зарегистрировать их указанным тобой способом.
|
|
Rius |
Отправлено: 06.03.2005, 22:59 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
Андрей Пример, урезанный только.
CODE | //---------------------------------------------------------------------------
//*.cpp
bool Registered = false;
namespace Opcclient
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TOPCTag)};
RegisterNoIcon(classes, 0);
classes[0] = __classid(TOPCClient);
RegisterComponents("OPC", classes, 0);
RegisterComponentEditor(classes[0], __classid(TOPCClientEditor));
PTypeInfo ti = *GetPropInfo(__typeinfo(TOPCClient),"Items")->PropType;
RegisterPropertyEditor(ti, __classid(TOPCClient),
"Items",__classid(TOPCClientProperty));
ti = *GetPropInfo(__typeinfo(TOPCTag),"ID")->PropType;
RegisterPropertyEditor(ti, __classid(TOPCTag),
"ID",__classid(TOPCTagIDProperty));
}
}
//--------------------------------------------------------------------------- |
CODE | //---------------------------------------------------------------------------
//*.h
class TOPCClientEditor : public TComponentEditor
{
private:
void __fastcall ExecuteVerb(int Index);
AnsiString __fastcall GetVerb(int Index);
int __fastcall GetVerbCount();
protected:
public:
};
//---------------------------------------------------------------------------
class TOPCClientProperty : public TPropertyEditor
{
void __fastcall Edit();
TPropertyAttributes __fastcall GetAttributes();
AnsiString __fastcall GetValue();
};
//---------------------------------------------------------------------------
class TOPCTagIDProperty : public TPropertyEditor
{
TPropertyAttributes __fastcall GetAttributes();
AnsiString __fastcall GetValue();
};
//--------------------------------------------------------------------------- |
olegenty Можно ссылку на подробное пошаговое описание с примерами? Летом долго над этим парился, но ничего не получилось разделить. "Дизайнерские штучки тянутся".
(C++Builer 6)
|
|
Andrey |
Отправлено: 09.03.2005, 09:55 |
|
Не зарегистрирован
|
Да. Получилось разделить. Спасибо. Но действительно хотелось бы примеров больше и узнать по поводу тестирования компонентов. А то при закрытии тестовог оприложения часто падает билдер с криком Аксцесс виалейшен или ошибки VCL выползают.
|
|
Rius |
Отправлено: 09.03.2005, 10:13 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
Для тестирования создаёшь компонент в RealTime, а не установкой компонента на форму в дизайнере. К сожалению для редактора свойств это не пройдет.
Литература в т.ч. и по созданию компонент: http://progz.ru/forum/viewtopic.php?t=11128
|
|
Andrey |
Отправлено: 10.03.2005, 10:00 |
|
Не зарегистрирован
|
Спасибо большое всем, кто откликнулся.
Сейчас гляну книгу.
|
|
Rius |
Отправлено: 13.03.2005, 09:38 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
Разделил пакет на runtime и designtime.
Регистрация в первом:
CODE | namespace Opcclient
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TOPCTag)};
RegisterNoIcon(classes, 0);
classes[0] = __classid(TOPCClient);
RegisterComponents("OPC", classes, 0);
}
} |
Во втором:
CODE | namespace OpcclientDes
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1];
classes[0] = __classid(TOPCClientEditor);
RegisterComponentEditor(classes[0], __classid(TOPCClientEditor));
PTypeInfo ti = *GetPropInfo(__typeinfo(TOPCClient),"Items")->PropType;
RegisterPropertyEditor(ti, __classid(TOPCClient),
"Items",__classid(TOPCClientProperty));
ti = *GetPropInfo(__typeinfo(TOPCTag),"ID")->PropType;
RegisterPropertyEditor(ti, __classid(TOPCTag),
"ID",__classid(TOPCTagIDProperty));
}
} |
Ко второму пакету добавил первый runtime bpi и designide.bpi
Все компилируется без ошибок, но компоненты не появляются на палитре. В чём дело?
Отредактировано Rius — 13/03/2005, 12:18
|
|
Rius |
Отправлено: 13.03.2005, 11:39 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
Вот очень простой пример. Исправте кто знает.
Все, вроде разобрался (спустся полгода, и то случайно ).
Отредактировано Rius — 13/03/2005, 18:14
|
|