Главная страница
    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.51 MB
Время: 0.044 c
15-1165394136
bmv
2006-12-06 11:35
2006.12.31
quick report для delphi2006


15-1165809391
Slider007
2006-12-11 06:56
2006.12.31
С днем рождения ! 9 ноября


10-1127113531
TER
2005-09-19 11:05
2006.12.31
сервер с библиотекой типов


4-1156501872
Тфьу
2006-08-25 14:31
2006.12.31
Как отловить ошибку макроса Excel?


2-1166008544
031178
2006-12-13 14:15
2006.12.31
Неужели никто не знает как найти слово в HTML





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