Главная страница
    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.45 MB
Время: 0.005 c
7-88663
Sh-Oleg
2002-02-28 13:49
2002.05.27
работа с железом


3-88322
Vladimir V.N
2002-04-30 08:52
2002.05.27
InterBase and Internet Explorer


1-88557
Сатир
2002-05-16 15:12
2002.05.27
Определение битмапы для нового компонента


3-88348
PONTIY
2002-04-29 13:56
2002.05.27
Матершина от создателей ADO


1-88497
Riko
2002-05-15 16:52
2002.05.27
Снова INI...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский