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

Вниз

Вызвать обработчик, имя которого неизвестно в дизайн-тайме   Найти похожие ветки 

 
TrainerOfDolphins ©   (2006-12-08 16:25) [0]

День добрый!
Есть ли способ из кода вызвать обработчик, указатель на который содержится в свойстве типа, например, TNotifyEvent?
Заранее спасибо.


 
Desdechado ©   (2006-12-08 16:26) [1]

имя свойтсва известно?
вызывай его


 
Anatoly Podgoretsky ©   (2006-12-08 16:33) [2]

> TrainerOfDolphins  (08.12.2006 16:25:00)  [0]

Это не возможно, Дельфи не интерпритатор, все обработчики должны быть созданы в Дизайн тайм и до компиляции.


 
TrainerOfDolphins ©   (2006-12-08 16:35) [3]


> имя свойтсва известно?
> вызывай его

Предположим есть
SomeDBGrid.OnDblClick:=UnknownHandler;
как вызвать UnknownHandler через свойство OnDblClick?
Если можно, конкретней, пожалуйста... :)


 
TrainerOfDolphins ©   (2006-12-08 16:38) [4]


> Это не возможно, Дельфи не интерпритатор, все обработчики
> должны быть созданы в Дизайн тайм и до компиляции.

Но я же могу переприсваивать обработчики в коде. Могу запоминать обработчик в переменную...


 
Anatoly Podgoretsky ©   (2006-12-08 16:39) [5]

> TrainerOfDolphins  (08.12.2006 16:35:03)  [3]

Открой исходника VCL и поиск по if Assigned(F далее смотришь что там.


 
novill ©   (2006-12-08 16:44) [6]

> [0] TrainerOfDolphins ©   (08.12.06 16:25)


Метод с подходящими параметрами написан?
Имя или адрес его перед присваиванием известны?
Задавай!


 
TrainerOfDolphins ©   (2006-12-08 16:48) [7]


> Открой исходника VCL и поиск по if Assigned(F далее смотришь
> что там.

там много таких мест.


 
novill ©   (2006-12-08 16:48) [8]

> [5] Anatoly Podgoretsky ©   (08.12.06 16:39)

А чем написанное там мешает такой работе?


 
Elen ©   (2006-12-08 16:57) [9]


> как вызвать UnknownHandler через свойство OnDblClick?
> Если можно, конкретней, пожалуйста... :)

Когда-то мне попалась на глаза статья одного Хацкера. Он предлагал примерно такой вариант - (сразу скажу что говорю примерно) Выделить в начале обработчика IP вызвавшей функции и JMP на нее, но это ИМХО геммор особенно в Делфях, хотя он настаивал что можно везде.


 
Anatoly Podgoretsky ©   (2006-12-08 16:58) [10]

> TrainerOfDolphins  (08.12.2006 16:48:07)  [7]

Ну и что, что много, все смотреть не надо, достаточно одного, любого


 
Anatoly Podgoretsky ©   (2006-12-08 16:58) [11]

> novill  (08.12.2006 16:48:08)  [8]

Ничем, наоборот помогает.


 
TrainerOfDolphins ©   (2006-12-08 17:00) [12]

Чувствую, надо конкретней. А то сеанс телепатии начинается :).
Значится так.
Предположим есть два обработчика.
procedure Handler1 (Sender:object);
begin
  {алгоритм1}
end;
procedure Handler2 (Sender:object);
begin
  {алгоритм2}
end;

Есть код, в котором в зависимости от некоторого условия определённому событию ставится в соответствие один из обработчиков.

begin
  if {условие}  
  then Grid.OnDblClick:=Handler1
  else Grid.OnDblClick:=Handler2;
end;


Как из кода вызвать то, что "содержится" в Grid.OnDblClick?

Если есть такой способ, привидите, плиз, хотя бы примерный код, хоть принцип.


 
Elen ©   (2006-12-08 17:02) [13]


> Как из кода вызвать то, что "содержится" в Grid.OnDblClick?

Хоть понял что спросил? - "Как вызвать из кода код который сейчас выполняется".


 
Игорь Шевченко ©   (2006-12-08 17:03) [14]


> begin
>   if {условие}  
>   then Grid.OnDblClick:=Handler1
>   else Grid.OnDblClick:=Handler2;
> end;



> Как из кода вызвать то, что "содержится" в Grid.OnDblClick?


Grid.DblClick ?


 
TrainerOfDolphins ©   (2006-12-08 17:04) [15]


> Метод с подходящими параметрами написан?
> Имя или адрес его перед присваиванием известны?
> Задавай!

куда задавать?


 
Elen ©   (2006-12-08 17:04) [16]


> Grid.DblClick ?

Ага. И зациклится сразу. Автор ты что с дельфинами перепил?


 
Elen ©   (2006-12-08 17:06) [17]


> begin
>   if {условие}  
>   then Grid.OnDblClick:=Handler1
>   else Grid.OnDblClick:=Handler2;
> end;
>
> Как из кода вызвать то, что "содержится" в Grid.OnDblClick?
>

Кстати можно вызов прописать прямо в Then или в Else. Зачем определять что откуда вызывается?


 
Игорь Шевченко ©   (2006-12-08 17:07) [18]

Elen ©   (08.12.06 17:04) [16]

Ты б матчасть что ли учило. Чудо.


 
TrainerOfDolphins ©   (2006-12-08 17:07) [19]


> Хоть понял что спросил?

я то понял... Чувствую, что хреново спросил. Меня понять, что ли не могут...


 
umbra ©   (2006-12-08 17:09) [20]

см. [14]


 
TrainerOfDolphins ©   (2006-12-08 17:17) [21]


> Кстати можно вызов прописать прямо в Then или в Else. Зачем
> определять что откуда вызывается?

Вопрос, конечно, конструктивный.
Тем не менее, если бы так можно было бы, было бы гибче...
Тем более, что меня просто интересует этот вопрос. Зачем мне это - это уже дело третье. Долго расказывать...


 
TrainerOfDolphins ©   (2006-12-08 17:20) [22]


> umbra ©   (08.12.06 17:09) [20]
> см. [14]


OnDblClick - это я для примеру и для простоты. А если, скажем, BeforeDelete?


 
umbra ©   (2006-12-08 17:23) [23]


> А если, скажем, BeforeDelete?
>

даже для OnMouseMove сработает :) Лишь бы обработчик был назаначен.


 
Stanislav ©   (2006-12-08 17:26) [24]

TrainerOfDolphins ©   (08.12.06 17:00) [12]
Не проще переписать логику?
Примерно так:
Procedure Handler (sender:TObject);
begin
if {условие}  
 Handler1 (Sender);
 else Grid.OnDblClick:=Handler2 (Sender);
end;

Procedure onGrid1dblclick (sender:TObject);
begin
Handler(Sender);

end;


 
Stanislav ©   (2006-12-08 17:27) [25]

т.е.

Procedure Handler (sender:TObject);
begin
if {условие}  
Handler1 (Sender);
else Handler2 (Sender);
end;


 
TrainerOfDolphins ©   (2006-12-08 17:39) [26]

Я просто поражаюсь себе!
:). Таких простых вопросов я ещё не задавал....
Всё оказывается тривиально до безобразия.
Оказывается можно написать Grid.OnClick(Grid), и это будет равносильно вызову обработчика. Н-да.
Спасибо, господа! Прощения за отобранное у Вас время :)


 
Anatoly Podgoretsky ©   (2006-12-08 18:56) [27]

> Игорь Шевченко  (08.12.2006 17:07:18)  [18]

А стихами?

Учило - Чудило


 
Anatoly Podgoretsky ©   (2006-12-08 18:56) [28]

> TrainerOfDolphins  (08.12.2006 17:17:21)  [21]

Ну не рассказывай. Твое право.


 
Anatoly Podgoretsky ©   (2006-12-08 18:57) [29]

> TrainerOfDolphins  (08.12.2006 17:20:22)  [22]

Генотип принципиально не хочем смотреть, тоже твое право.



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

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

Наверх




Память: 0.53 MB
Время: 0.052 c
2-1165897474
Kvinta
2006-12-12 07:24
2006.12.31
Вернуть Field а ADO


1-1163407952
Corona
2006-11-13 11:52
2006.12.31
ошибка при работе с ListView


2-1165992803
031178
2006-12-13 09:53
2006.12.31
SaveDialog


15-1165392219
Kolan
2006-12-06 11:03
2006.12.31
CRT монитор дергается сверху зачем? :)


15-1165577567
sergeyst
2006-12-08 14:32
2006.12.31
TCP/IP