Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
ВнизВызов метода объекта класса Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c