Вниз
Скачать: CL | DM;

Как обратиться к свойству, зная его название?   Найти похожие ветки 

← →
Пубертанец   (2003-07-01 09:19) [0]

Т.е. что-то типа GetPropValue(Obj, "Number").

Пытался подключить TypInfo.pas и взял оттуда функцию GetPropValue
(GetPropValue(self, "Number")), но вырубается с исключением, что не найдено свойство Number, хотя такое свойство у меня в классе есть.


← →
MBo ©   (2003-07-01 09:33) [1]

А оно у тебя published?

вот это работает:

Caption:=GetPropValue(Self,"Width");


← →
Пубертанец   (2003-07-01 09:37) [2]

Нет, оно не published. А как тогда мне обратиться к нему, если оно не published? (на всякий случай, тип Number - string)


← →
MBo ©   (2003-07-01 09:42) [3]

RTTI-информация генерируется только для published.
А что за задача?
Нужно ли применение RTTI?


← →
Пубертанец   (2003-07-01 09:53) [4]

Задача такая: нужно получить значения всех свойств класса и потом манипулировать ими (например, вывести в Listbox)


← →
MBo ©   (2003-07-01 10:05) [5]

Эта задача решаема для published.


← →
Пубертанец   (2003-07-01 10:19) [6]

Хотя бы так. Но почему-то этот код вываливается с ошибкой "property Number not found".

TReestr = class
private
FNumber: string;
published
property Number: string read FNumber write FNumber;
end;


Caption:=GetPropValue(self, "Number");


← →
Poirot ©   (2003-07-01 10:23) [7]

self, форма в вашем случае или то где вы её (функ) юзаете...
вам надо обж типа TReestr вместо self указать!


← →
Пубертанец   (2003-07-01 10:28) [8]

Нет, у меня класс расположен в отдельном модуле, и даже подсказка говорит, что Self - это TReestr


← →
Zacho ©   (2003-07-01 10:34) [9]


> Пубертанец (01.07.03 10:28)

Т.е. строка Caption:=GetPropValue(self, "Number");
находится в каком-либо методе класса TReestr ? Точно ?


← →
NDeu ©   (2003-07-01 10:39) [10]


> Пубертанец (01.07.03 10:28)
> Нет, у меня класс расположен в отдельном модуле, и даже
> подсказка говорит, что Self - это TReestr

Тогда

> Caption:=GetPropValue(self, "Number");

Caption чей?


← →
Пубертанец   (2003-07-01 10:41) [11]

Yes


← →
Poirot ©   (2003-07-01 10:44) [12]

Давай код! Тут явно что-то не чисто!!!
Если ты говоришь, что self is TReestr, to где у него свойство Caption?


← →
Poirot ©   (2003-07-01 10:45) [13]


> Пубертанец (01.07.03 10:41)
> Yes

что yes?


← →
Пубертанец   (2003-07-01 10:48) [14]

Ой, yes - это NDeu. А код такой:

TReestr = class
private
FNumber: string;
public
constructor Create;
published
property Number: string read FNumber write FNumber;
end;

constructor TReestr.Create;
var Caption: string;
begin
inherited Create;
Number:="343";
Caption:=GetPropValue(Self, "Number");
showmessage(Caption);
end;


← →
Poirot ©   (2003-07-01 11:08) [15]

что-то мне кажктся, что для наследника TObject не пашет эта фигня!!!


← →
Пубертанец   (2003-07-01 11:23) [16]

*Б ТВОЮ МАТЬ!!!
Это только для TComponent!!!
Ох, ё-мое. Ну, спасибо. Буду наследовать от него.
Кстати, а как получить список свойств?


← →
Poirot ©   (2003-07-01 11:26) [17]


> *Б ТВОЮ МАТЬ!!!

надеюсь это не мне %)

Исследуй модуль TypInfo.pas!


← →
Zacho ©   (2003-07-01 11:37) [18]


> Пубертанец (01.07.03 11:23)

Насколько я понимаю, для TPersistent


← →
icWasya ©   (2003-07-01 13:15) [19]

во нашел!!!
{$TYPEINFO ON}// или {$M+}
type TReestr = class
private
FNumber: string;
public
constructor Create;
published
property Number: string read FNumber write FNumber;
end;
{$TYPEINFO OFF}// или {$M-} см $M+F1

constructor TReestr.Create;
var Caption: string;
begin
inherited Create;
Number:="343";
Caption:=GetPropValue(Self, "Number");
showmessage(Caption);
end;


и всё заработает



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.019 c
14-44822
Disa
2003-06-26 14:33
2003.07.14
Две процедуры


14-44811
gfhjs
2003-06-29 12:37
2003.07.14
INI!


3-44580
Fiend
2003-06-20 15:01
2003.07.14
FireBird Events


3-44550
jack128
2003-06-19 19:01
2003.07.14
Разделитель компонентов даты в BDE


3-44549
Max_
2003-06-18 19:39
2003.07.14
Счётчик для TQuery.Last???




   Наверх