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

Вниз

Как узнать какому объекту принадлежит метод?   Найти похожие ветки 

 
-Barmaley- ©   (2004-02-26 08:48) [0]

Есть
type
TProc = procedure of object;
TObj = class
public
procedure Sample;
end;
var
O1, O2, On: TObj;
P: TProc;
...
// Дале создатся куча объектов типа TObj (O1, O2, On);
// В какой то момент выполнения программы
P:=Ox.Samle; // Где x in [1..n];
// Как узнать какому объекту принадлежит метод лежащий в P???

P.S. Заранее благодарен за любую помощь!


 
Anatoly Podgoretsky ©   (2004-02-26 08:51) [1]

Обычно для этого в параметрах передают Sender, для этого есть предопределенный тип TNotifyEvent


 
MBo ©   (2004-02-26 08:57) [2]

Какой смысл этого действия?
TMethod(P).Data


 
Nikolay M. ©   (2004-02-26 09:12) [3]

А что для тебя есть признак какого-то конкретного объекта?
self не подойдет?


 
-Barmaley- ©   (2004-02-26 10:38) [4]

Подкоректирую вопрос:

В дальнейшем в каком нибудь месте программы
я вызываю метод:
P; // выполняеться тот метод который положен в P метод.

После этого (что-то еще выполняеться), мне необходимо
узнать какому объету принадлежит данный метод, и изменить его свойства без вызова метода... т.е. Sender, Self не подходят так-как действуют только внутри процедуры определяющей метод.

P.S. Есть что нибуть типа (ЧТОЗАОБЪЕКТ(P) as TObj).Field?


 
Тимохов ©   (2004-02-26 10:46) [5]

Вопрос ясен. Вы не очень хорошо представляете работу с процедурными типами.

В исходно вопросе вы написали TProc = procedure of object. Т.е. это не простой процедурных тип, а тип, переменные которого содержат в себе методы объектов (вообще говоря, это два совершенно разных типа). Т.к. это методы объектов, то значит внутри них доступен self. Через него обращайтесь к полям объекта.

Если я что-то не верно понял в вашем вопросе (что возможно), то привидите больше кода, что вы пытаетесь сделать.


 
-Barmaley- ©   (2004-02-26 11:01) [6]

>Тимохов.
Я имею предстовление как работать с процедурными типами, а также то что внутри процедуры определяющей метод доступен Self.

Но повторяю вопрос я уже вызвал этот метод через процедурную переменную. И конечно я могу обеспечить глобольную переменную и закинуть туда Self. Как сделать то что я хочу без переменной хранящей Self ("P" в реальном коде является массивом), и вне процедуры определяющей метод?

P.S. Люди иль я так пишу иль вы не так понимаете :(... пожалуйста прочтите внимательней.


 
Тимохов ©   (2004-02-26 11:06) [7]


> P.S. Люди иль я так пишу иль вы не так понимаете :(... пожалуйста
> прочтите внимательней.

Однозначно пишешь все так, но все равно не понятно.

Давай еще раз.
Ты вызвал метод P, который представляет переменную, определяющую метод. Ты уже ее вызвал! Следишь? :))))
Ну так вот если ты ее вызывал, то он (метод) вызывается не просто так, а у какого-то объекта. Если это так, то значит внутри данного метода доступен self.

Повторю, приведи больше кода, что ты делаешь. Легче будет говорить.

ААА!
Перечитал исходный вопрос. Начинаю понимать его лучше.
Ответ такой. Воспользуйся структурой TMethod.
TMethod(p).data - указатель на объект.
TMethod(p).code - указатель на процедуру в классе.


 
Verg ©   (2004-02-26 11:06) [8]


> [6] -Barmaley- © (26.02.04 11:01)


> Как сделать то что я хочу без переменной хранящей Self ("P"
> в реальном коде является массивом), и вне процедуры определяющей
> метод?


> P.S. Люди иль я так пишу иль вы не так понимаете :(... пожалуйста
> прочтите внимательней.


Так уж и вы тоже по-внимательней бы:


> [2] MBo © (26.02.04 08:57)
> Какой смысл этого действия?
> TMethod(P).Data


 
Тимохов ©   (2004-02-26 11:09) [9]

Автору:
Кстати, да, ответ то уже был дан в [2] :)))))
Я и сам пропустил... :((((


 
-Barmaley- ©   (2004-02-26 11:20) [10]

Благодарю:
MBo за ответ, Тимохова и Verg за улучшение зрения (я ответ MBo не заметил :)).
Все спасибо за участие...


 
Тимохов ©   (2004-02-26 11:27) [11]


> -Barmaley- © (26.02.04 11:20) [10]


Совет.
Сам часто пользуюсь TMethod.
Но думаю, что активное его использование приводит к риску будущей переносимости.
На вашем месте я бы отдельно хранил ссылку на объект. Т.е. хранить пару P,Obj явно, а не внутри p.

Думаю, что определить степень будущего риска в полной мере может АП. Он хорошо знает, что нас ждет с приходом net.



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

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

Наверх




Память: 0.5 MB
Время: 0.025 c
1-25743
Александр1
2004-02-18 16:39
2004.03.09
Работа с Tray


1-25795
Mixa3
2004-02-27 09:09
2004.03.09
Как записать строку в record?


14-25933
Sniper-Max
2004-01-31 08:46
2004.03.09
Помогите!!! У меня странно комп перезагружается... сам!!!


3-25680
КомофОнСамый
2004-02-10 19:34
2004.03.09
перетаскивание TitleButtion в RxLib


1-25753
Sig22
2004-02-26 15:59
2004.03.09
combo box и файл с расширением dat