![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Runtime classes
Ling © (2006-03-25 12:52:00)Пожалуйста дайте кто-нибудь ссылку на подробную инфу об использовании методов TObject:
ClassInfo
FieldAddress
и др.
В общем мне нужно в runtime , имея название класса, насвания полей
1) проверить корректность имени класса (есть ли такой)
2) создать экземпляр
3) проверить корректность названий полей
4) присвоить полям значения
буду рад любой помощи 8)
Kerk (2006-03-25 23:08:00) [1]jack128 © (25.03.06 13:18) [3]
а что ты будешь передовать в качестве параметра это процедке??
Тоже что и обычно. Объект, имя свойства и значение.
> уж не говоря о том, что разговор о полях, а не о
> свойствах ;-)
Это да.. упустил из виду :)
Ling (2006-03-25 13:30:00) [2]Огромное спасибо 8)
jack128 (2006-03-25 13:19:00) [3]jack128 © (25.03.06 13:18) [3]
уж не говоря о том, что разговор о полях, а не о свойствах ;-)
jack128 (2006-03-25 13:18:00) [4]Kerk © (25.03.06 13:10) [2]
SetPropValue
а что ты будешь передовать в качестве параметра это процедке??
Kerk (2006-03-25 13:10:00) [5]Юрий Зотов © (25.03.06 13:05) [1]
но нужно еще знать их тип. Например, для поля типа integer:
PInteger(Obj.FieldAddress(FieldName))^ := 3;
Почему не SetPropValue ? Он без типа может.
Юрий Зотов (2006-03-25 13:05:00) [6]1) проверить корректность имени класса (есть ли такой)
Если программа откомпилировалась и уже работает, то точно есть, можно не проверять. Если же имя класса задано строкой и класс зарегистрирован (см. RegisterClasses), то проверяется вызовом GetClass или FindClass. Они же возвращают ссылку на класс, которая может быть использована, например, для вызова конструктора.
2) создать экземпляр
Obj := Ссылка_на_класс.Create(...)
3) проверить корректность названий полей
Можно сделать только для published-полей. Если FieldAddress возвращает nil, значит, имя поля задано некорректно.
4) присвоить полям значения
Можно сделать только для published-полей, но нужно еще знать их тип. Например, для поля типа integer:
PInteger(Obj.FieldAddress(FieldName))^ := 3;