Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.46 MB
Время: 0.006 c
1-88443
Дмитрий757567
2002-05-17 13:59
2002.05.27
HALT - НЕ НОРМАЛЬНЫЙ


4-88667
Vilux
2002-03-26 02:30
2002.05.27
Список запускаемых прог на компе


14-88609
--Reporter--
2002-04-19 09:30
2002.05.27
Создан ли какой-нибудь клиент под эту конференцию?


1-88399
Димок
2002-05-15 18:03
2002.05.27
Как вставить свой пункт в чужое PopuMenu?


1-88521
pusrg
2002-05-15 22:13
2002.05.27
Св-во Data для TListItem





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский