![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов метода объекта класса [D5, D6, Win95/98, Win2k]
alkmas © (2002-05-13 10:48:00)Как вызвать метод объекта класса, зная только адрес объекта
и имя метода?
alkmas (2002-05-15 12:09:00) [1]Спасибо всем! Вроде разобрался.
MBo (2002-05-15 11:59:00) [2]RTTI дает информацию только о published
Бурундук (2002-05-15 11:46:00) [3]Всё правильно, получить адрес не published метода по имени нельзя.
А какая, собственно, стоит задача?
И как велико множество тех методов, которые должны быть таким образом вызваны?
PS Если эти методы находятся в твоём ведении, размести их в published и всех делов.
alkmas (2002-05-15 11:34:00) [4]Уточняю вопрос - например:
var meth: procedure of object;
NameMethod:="Show";
TMethod(meth).Code := obj.MethodAddress(NameMethod);
TMethod(meth).Data := obj;
meth; // вызов
Если метод Show находится в published секции, то этот пример
работает если в public, то выдается ошибка.
MBo (2002-05-15 11:19:00) [5]p:=memo1;
TMemo(p).Clear;
;)
alkmas (2002-05-15 10:27:00) [6]Это все верно для published методов, а как для остальных?
MBo (2002-05-13 14:02:00) [7]var p:pointer;//или TObject
p:=адрес объекта
TНужныйОбъект(p).НужныйМетод;
пример
procedure TForm1.Label1Click(Sender: TObject);
var p:pointer;
begin
p:=label1;
Tlabel(p).Caption:="qq";
end;
Бурундук (2002-05-13 12:18:00) [8]Тогда уж так:
var meth: procedure (...) of object;
TMethod(meth).Code := obj.MethodAddress(имя метода);
TMethod(meth).Data := obj;
meth(...); // вызов
Ra (2002-05-13 12:01:00) [9]если метод published то
obj:tObject;
proc:procedure (...);
obj:=адрес объекта;
proc:=obj.MethodAddress(имя метода);