Typinfo::TTypeKinds SupportKinds;
SupportKinds << tkUnknown << tkInteger << tkChar << tkEnumeration <<
tkFloat << tkString << tkSet << tkClass << tkWChar << tkLString << // << tkMethod << tkInterface << tkInt64<< tkDynArray
tkWString << tkVariant << tkArray << tkRecord ;
Typinfo::TPropList pList;
int nPropCount = GetPropList((Typinfo::PTypeInfo)(Comp->ClassInfo()),SupportKinds,((Typinfo::PPropList)(&pList)));
Работа с RTTI информацией
Код:
В данном коде я получаю все __publisehed свойства класса и их типы, после чего для свойств с типами String и bool создаю на форме компоненты TEdit и TCheckBox...
А вот как сделать так чтобы при заполнении данных компонентов автоматически заполнялись и их свойства в объекте Comp не соображу..
Может кто то уже реализовывал подобное?
Цитата: nILruM
В данном коде я получаю все __publisehed свойства класса и их типы, после чего для свойств с типами String и bool создаю на форме компоненты TEdit и TCheckBox...
А вот как сделать так чтобы при заполнении данных компонентов автоматически заполнялись и их свойства в объекте Comp не соображу..
Может кто то уже реализовывал подобное?
А вот как сделать так чтобы при заполнении данных компонентов автоматически заполнялись и их свойства в объекте Comp не соображу..
Может кто то уже реализовывал подобное?
Код:
SetPropValue()
Спасибо все оказалось проще чем я думал..))
Что то вроде этого:
Код:
for(int i=0;i<CountEnum;i++)
AComboBox->Items->Add(GetEnumName(EnumType,i));
AComboBox->Items->Add(GetEnumName(EnumType,i));
Как узнать CountEnum?
Цитата: nILruM
Еще вопрос.. Функция GetEnumName возвращает название перечисляемого типа enum по указателю на запись TTypeInfo и порядковому номеру значения. А как получить количество значений в enum, что бы можно было организовать цикл по всем названиям значений?
Что то вроде этого:
Как узнать CountEnum?
Что то вроде этого:
Код:
for(int i=0;i<CountEnum;i++)
AComboBox->Items->Add(GetEnumName(EnumType,i));
AComboBox->Items->Add(GetEnumName(EnumType,i));
Как узнать CountEnum?
см. GetTypeData(), PTypeData, PTypeData::MinValue, PTypeData::MaxValue
Спасибо сделал)
А насколько эти функции совместимы при переходе на другую версию Builder'а? Как я знаю в BDS2006 это недокументированные функции..
Цитата: nILruM
А насколько эти функции совместимы при переходе на другую версию Builder'а? Как я знаю в BDS2006 это недокументированные функции..
хз, надо пробовать... компиллятор покажет
Цитата: nILruM
А насколько эти функции совместимы при переходе на другую версию Builder'а? Как я знаю в BDS2006 это недокументированные функции..
В 2010-ой версии RTTI вроде прокачивали.
Имеется класс у которого в __published секции указано свойство возвращающее указатель на класс... что то типо этого.
Код:
__published:
__property TPlDiagr* Diagr={read=FDiagr,write=FDiagr};
__property TPlDiagr* Diagr={read=FDiagr,write=FDiagr};
когда пытаюсь присвоить значение
Код:
TPlDiagr* Buf=new TPlDiagr(this);
SetPropValue(FindComp,"Diagr",Buf);
SetPropValue(FindComp,"Diagr",Buf);
выдает ошибку Invalid property type: TPlDiagr
Класс TPlDiagr объявлен как
Код:
class DELPHICLASS TPlDiagr;
Пробовал сначала приводить к Variant все равно не помогает..
Из-за чего может быть ошибка?