C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Кнопка в инспекторе объектов, Как сделать чтобы появилась кнопка "..."
Ajgor
Отправлено: 10.11.2004, 20:59


Ученик-кочегар

Группа: Участник
Сообщений: 23



Подскажите пожалуйста, как сделать так что бы в инспекторе объектов появилась кнопка с тремя точками ("...") при нажатии которой например появлялся диалог выбора файла. (типа как свойство DataBaseName у компонента TIBDatabase)
Заранее спасибо!!!
olegenty
Отправлено: 11.11.2004, 07:47


Ветеран

Группа: Модератор
Сообщений: 2412



определить свой PropertyEditor для данного свойства компонента.
Rius
Отправлено: 11.11.2004, 08:35


Мастер участка

Группа: Участник
Сообщений: 321



В простейшем случае создаешь новый компонент на основе нужного, в h-файле компонента добавляешь следующее:
CODE
//---------------------------------------------------------------------------
#ifdef __BUILDER6__
       #include "designeditors.hpp"
       #include "designintf.hpp"
#endif
#ifdef __BUILDER5__
       #include <dsgnintf.hpp>
#endif

class TOPCClientProperty : public TPropertyEditor
{
       void __fastcall Edit();
       TPropertyAttributes __fastcall GetAttributes();
       AnsiString __fastcall GetValue();
};

В CPP, в функции регистрации компонента
CODE
              PTypeInfo ti = *GetPropInfo(__typeinfo(TOPCClient),"Items")->PropType;
         RegisterPropertyEditor(ti, __classid(TOPCClient),
                       "Items",__classid(TOPCClientProperty));

В CPP просто:
CODE
//---------------------------------------------------------------------------
void __fastcall TOPCClientProperty::Edit()
{
//Здесь можно показать свою форму редактора свойства
ShowItemsEditor(Designer, (TOPCClient *)this->GetComponent(0));
}
//---------------------------------------------------------------------------
TPropertyAttributes __fastcall TOPCClientProperty::GetAttributes()
{
return TPropertyAttributes() << paDialog >> paMultiSelect;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TOPCClientProperty::GetValue()
{
TOPCClient *cl = (TOPCClient *)this->GetComponent(0);
if(cl->Count == 0) return "None";
// else return cl->Items->ClassName();
else return "TOPCTag[]";
}

Здесь приведен только самый необходимый код для PropertyEditor, все остальное — куча заморочек. Еще в пакет надо включить доп. билиотеки.
Ajgor
Отправлено: 11.11.2004, 15:22


Ученик-кочегар

Группа: Участник
Сообщений: 23



Спасибо за ответы

Вернуться в Вопросы программирования в C++Builder