Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.27;
Скачать: CL | DM;

Вниз

Вызов метода объекта класса   Найти похожие ветки 

 
alkmas   (2002-05-13 10:48) [0]

Как вызвать метод объекта класса, зная только адрес объекта
и имя метода?


 
Ra   (2002-05-13 12:01) [1]

если метод published то

obj:tObject;
proc:procedure (...);

obj:=адрес объекта;
proc:=obj.MethodAddress(имя метода);


 
Бурундук   (2002-05-13 12:18) [2]

Тогда уж так:

var meth: procedure (...) of object;

TMethod(meth).Code := obj.MethodAddress(имя метода);
TMethod(meth).Data := obj;

meth(...); // вызов


 
MBo   (2002-05-13 14:02) [3]

var p:pointer;//или TObject
p:=адрес объекта
TНужныйОбъект(p).НужныйМетод;

пример
procedure TForm1.Label1Click(Sender: TObject);
var p:pointer;
begin
p:=label1;
Tlabel(p).Caption:="qq";
end;


 
alkmas   (2002-05-15 10:27) [4]

Это все верно для published методов, а как для остальных?


 
MBo   (2002-05-15 11:19) [5]

p:=memo1;
TMemo(p).Clear;
;)


 
alkmas   (2002-05-15 11:34) [6]

Уточняю вопрос - например:

var meth: procedure of object;

NameMethod:="Show";
TMethod(meth).Code := obj.MethodAddress(NameMethod);
TMethod(meth).Data := obj;

meth; // вызов
Если метод Show находится в published секции, то этот пример
работает если в public, то выдается ошибка.


 
Бурундук   (2002-05-15 11:46) [7]

Всё правильно, получить адрес не published метода по имени нельзя.

А какая, собственно, стоит задача?
И как велико множество тех методов, которые должны быть таким образом вызваны?

PS Если эти методы находятся в твоём ведении, размести их в published и всех делов.


 
MBo   (2002-05-15 11:59) [8]

RTTI дает информацию только о published


 
alkmas   (2002-05-15 12:09) [9]

Спасибо всем! Вроде разобрался.



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

Текущий архив: 2002.05.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
1-88420
Vint
2002-05-17 09:53
2002.05.27
Тип данных


6-88571
Andery G
2002-03-16 14:25
2002.05.27
как можно получить список всех общих ресурсов в сети!!!


6-88577
ATLANTIDO
2002-03-10 16:00
2002.05.27
Возможно средствами Делфи создать сетевой диск ...


1-88533
adav
2002-05-15 11:28
2002.05.27
Invalid floating point operation. Не могу разобраться


3-88313
Praco
2002-04-29 11:01
2002.05.27
Гетерогенные запросы в InterBase.