![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Директива message [D7]
borodin © (2007-10-18 13:06:00)Добрый день, мастера!
Имеется вопрос такого содержания:
Поддержка директивы message WM_XXX у процедурных методов элементов управления - встроенная способность компилятора, или я мог бы использовать её в производном от TObject классе?
Например, имеем класс А, являющийся, по сути, оберткой для оконной процедуры, и конструктор, принимающий в качестве параметра ссылку на элемент. В конструкторе А задаем новую оконную процедуру для элемента, при обработке сообщения вызываем истинную процедуру по сохраненной в поле А ссылке. В общем, такой вариант работает, всё ок, просто хочется большего - если создать производный класс В=(А), тогда чтобы провести обработку дополнительных сообщений, на обработку которых не рассчитан класс А, приходится объявлять процедуру в А виртуальной и переопределять её в В. В принципе, не критично, однако механизм, вызывающий соотвтствующий обработчик при указании директивы message подошел бы гораздо лучше..
Хочется услышать ваше мнение по этому поводу. Вам слово!
Eraser (2007-10-18 15:40:00) [1]моню команду $cc ))
Игорь Шевченко (2007-10-18 15:23:00) [2]oxffff © (18.10.07 15:17) [10]
> В моей памяти только asm Z80 LDIR это 237,176.
Э...я до сих пор помню коды команд L ($58), LR ($18), ST ($50), BALR ($05) и многие другие :)
oxffff (2007-10-18 15:22:00) [3]Потом я купил за две бутылки водки в 9 классе у своего одноклассника
книгу по защищенному режиму i386.
До сих пор стоит на полке.
oxffff (2007-10-18 15:17:00) [4]
> clickmaker © (18.10.07 15:04) [9]
>
> > А вот вставка на ASM
>
> а прямо в машинных кодах - еще больше )
В моей памяти только asm Z80 LDIR это 237,176.
Если не ошибаюсь. Давно это было.
Было дело я так программировал.
Кассета с отладчиком была испорчена.
Приходилось на цифрах мучиться, особенно интересно было с условными и безусловными переходами.
clickmaker (2007-10-18 15:04:00) [5]
> А вот вставка на ASM
а прямо в машинных кодах - еще больше )
oxffff (2007-10-18 15:03:00) [6]
> Игорь Шевченко © (18.10.07 14:54) [7]
Именно так. :)
А вот вставка на ASM позволит вызвать все что угодно. :)
Игорь Шевченко (2007-10-18 14:54:00) [7]
> Dispatch - позволяет вызвать только подможество
с id < $C000
borodin (2007-10-18 14:00:00) [8]Всем спасибо!-) Как всегда, - "ларчик просто открывался"
oxffff (2007-10-18 13:52:00) [9]
> borodin (18.10.07 13:36) [2]
> Уточним. TObject. Я немного не въезжаю, зачем в нём нужен
> виртуальный Dispatch(var Message), там асм, не силен, увы.
> .. Может в нём корень зла? Каков механизм, запускаемый при
> указании message?
Message- это обычный динамический метод c заданным явно индексом.
Dispatch - позволяет вызвать только подможество message индексов динамических методов, остальные обрабатывает DefaultHadler.
Сергей М. (2007-10-18 13:50:00) [10]
> Каков механизм, запускаемый при указании message?
Если объект есть наследник TControl, то вызове (явном или неявном) его WndProc происходит вызов метода Dispatch(), который собственно и осуществляет динамический поиск и вызов обработчика соотв.сообщения, если таковой указан той самой директивой.
borodin (2007-10-18 13:48:00) [11]Мдя... сам себе режиссер. Добавил в конце процедуры Dispatch(msg) и пошла передача обработчику message WM_CLOSE в производном классе. Ок. Дальше посмотрим.
Спасибо за пинок!
borodin (2007-10-18 13:36:00) [12]Уточним. TObject. Я немного не въезжаю, зачем в нём нужен виртуальный Dispatch(var Message), там асм, не силен, увы... Может в нём корень зла? Каков механизм, запускаемый при указании message?
Сергей М. (2007-10-18 13:19:00) [13]
> я мог бы использовать её в производном от TObject классе?
При такой постановке задачи эта директива тебе никак не поможет.