![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Уважаемые, имею траблы с GetPropList. Функция честно возвращает список
property, но когда property имеет тип record, то функция не включает её в возвращаемый список. Код:
program enumerator;
{$APPTYPE CONSOLE}
uses
TypInfo,
Classes,
SysUtils;
type
tRec = record
x,y : Single;
end ;
tBaseClass = class ( TPersistent )
end ;
tChild = class( tBaseClass )
private
Fbeta: Boolean;
Falpha: string;
Flazha: tRec;
published
property alpha : string read Falpha write Falpha;
property beta : Boolean read Fbeta write Fbeta;
property lazha : tRec read Flazha write Flazha;
end ;
var
List: PPropList;
Count, i : integer;
begin
with tChild.Create do
begin
GetMem(List, 3);
Count := GetPropList(ClassInfo, tkAny, List);
for i := 0 to count -1 do
with List[ I ]^ do
writeln( format( '%s %s (%s)', [ Name, PropType^.Name, getenumname( typeinfo(TTypeKind ), Integer(PropType^.Kind ) ) ] ) );
FreeMem( List );
Free;
end;
Readln;
end.Вывод: Код:
alpha String (tkLString) beta Boolean (tkEnumeration) Можно ли с этим как нибудь побороться? Последний раз редактировалось front242, 14.12.2012 в 06:39. |
|
#2
|
|||
|
|||
|
спасибо за помощь, нашел самостоятельно вот этот хак
http://alex.ciobanu.org/?p=55 |
|
#3
|
||||
|
||||
|
Цитата:
|
|
#4
|
|||
|
|||
|
Цитата:
Возможно, будет работать другой "хак". Просто модуль, в котором описана запись, надо скомпилить с поддержкой RTTI ({$M+}, если не ошибаюсь). |
|
#5
|
|||
|
|||
|
да. к сожалению в 7 это не работает. вопрос остаётся открытым. {$M+} тоже не помогает, видимо потому что TPersistent в Classes уже объявлен режиме $M+
Последний раз редактировалось front242, 16.12.2012 в 20:45. |
|
#6
|
||||
|
||||
|
Цитата:
|
|
#7
|
||||
|
||||
|
Цитата:
|