Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов метода объекта класса [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(имя метода);


Наверх

Титульная страница Поиск, карта сайта Написать письмо