Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Директива 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 классе?


При такой постановке задачи эта директива тебе никак не поможет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо