![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
распознание выполнения события формы
вопрос © (2005-03-06 14:54:00)Народ, кто-нить знает как можно из компонента узнать, что в форме, на которой он лежит выполнилось событие OnShortCut, не прописывая никаких кодов в обработчик этого события.
Юрий Зотов (2005-03-07 01:53:00) [21]> Дмитрий Мыльников (07.03.05 01:34) [5]
1. Когда Вы в следующий раз будете назначать любой обработчик любого события любого компонента (в том числе, через Object Inspector), не забудьте сохранить "старый вызов, который там может уже быть".
2. Жду цитат из Dx.
3. Более правильный способ определяется задачей. Например, хук.
4. Этот вопрос уже давно обсуждается в "компонентах". Повторяться здесь не считаю нужным.
5. Смею надеяться, что к сообществу профессиональных разработчиков компонентов я уже давно приобщился. Во всяком случае, не я один так считаю.
Дмитрий Мыльников (2005-03-07 01:34:00) [22]Если вы написали подобный код, и не сохранили тарый вызов, который там может уже быть, то вы сами себе "злобный баклан" :).
Жаль, что прямо сейчас под рукой нет исходников DevExpress, а то я бы с ходу дал пару цитат оттуда, поскольку как раз пару дней назад разбирался с тем, как у них реализованы некоторые механизмы.
Кстати, а какой "более правильный способ" для перехвата событий? Я что-то от вас его не услышал. Глядишь и мы тоже немного приобщимся к сообществу профессиональных разработчиков компонентов.
Юрий Зотов (2005-03-06 22:14:00) [23]> Дмитрий Мыльников (06.03.05 22:03) [3]
> Большинство серьёзных компонентов, те же DevExpress
> используют подобную технику...
Позвольте утверждать обратное - ни один серьёзный компонент (и уж тем более DevExpress) подобную технику НЕ использует. Потому что стоит мне в своей программе написать что-то вроде
OnSomeEvent := MyEventHandler
и компонент работать перестанет.
Есть железный закон - компонент не имеет права использовать события, доступные юзеру. Это азбука, которую обязан знать каждый разработчик компонентов. Тем более, серьезный.
Поэтому смотреть в исходники DevExpress даже нет необходимости.
Дмитрий Мыльников (2005-03-06 22:03:00) [24]Ну почему плохой. На самом деле единственный, если речь идёт именно о событиях Delphi. О событиях, которые посылает Windows, можно попытаться узнать через перехват нужного сообщения, а вот события, которые работают через функции обратного вызова, можно только подставив свою функцию, запомнив во внутренней переменной старое значение. Если там что-то было, то нужно не забыть его вызвать (в начале или в конце определяется логикой работы).
Большинство серьёзных компонентов, те же DevExpress используют подобную технику (посмотрите в исходниках сами, если не верите).
DrPass (2005-03-06 18:12:00) [25]Подменить настоящий обработчик обработчиком из компоненты, а из него вызывать настоящий (плохой метод, если ты собрался распространять свой компонент).
вопрос (2005-03-06 16:51:00) [26]может какие нибудь мало-мальские предложения есть?