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

Вниз

Директива message   Найти похожие ветки 

 
borodin   (2007-10-18 13:06) [0]

Добрый день, мастера!

Имеется вопрос такого содержания:
Поддержка директивы message WM_XXX у процедурных методов элементов управления - встроенная способность компилятора, или я мог бы использовать её в производном от TObject классе?
Например, имеем класс А, являющийся, по сути, оберткой для оконной процедуры, и конструктор, принимающий в качестве параметра ссылку на элемент. В конструкторе А задаем новую оконную процедуру для элемента, при обработке сообщения вызываем истинную процедуру по сохраненной в поле А ссылке. В общем, такой вариант работает, всё ок, просто хочется большего - если создать производный класс В=(А), тогда чтобы провести обработку дополнительных сообщений, на обработку которых не рассчитан класс А, приходится объявлять процедуру в А виртуальной и переопределять её в В. В принципе, не критично, однако механизм, вызывающий соотвтствующий обработчик при указании директивы message подошел бы гораздо лучше..
Хочется услышать ваше мнение по этому поводу. Вам слово!


 
Сергей М. ©   (2007-10-18 13:19) [1]


> я мог бы использовать её в производном от TObject классе?


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


 
borodin   (2007-10-18 13:36) [2]

Уточним. TObject. Я немного не въезжаю, зачем в нём нужен виртуальный Dispatch(var Message), там асм, не силен, увы... Может в нём корень зла? Каков механизм, запускаемый при указании message?


 
borodin   (2007-10-18 13:48) [3]

Мдя... сам себе режиссер. Добавил в конце процедуры Dispatch(msg) и пошла передача обработчику message WM_CLOSE в производном классе. Ок. Дальше посмотрим.
Спасибо за пинок!


 
Сергей М. ©   (2007-10-18 13:50) [4]


> Каков механизм, запускаемый при указании message?


Если объект есть наследник TControl, то вызове (явном или неявном) его WndProc происходит вызов метода Dispatch(), который собственно и осуществляет динамический поиск и вызов обработчика соотв.сообщения, если таковой указан  той самой директивой.


 
oxffff ©   (2007-10-18 13:52) [5]


> borodin   (18.10.07 13:36) [2]
> Уточним. TObject. Я немного не въезжаю, зачем в нём нужен
> виртуальный Dispatch(var Message), там асм, не силен, увы.
> .. Может в нём корень зла? Каков механизм, запускаемый при
> указании message?


Message- это обычный динамический метод c заданным явно индексом.
Dispatch - позволяет вызвать только подможество message индексов динамических методов, остальные обрабатывает DefaultHadler.


 
borodin   (2007-10-18 14:00) [6]

Всем спасибо!-) Как всегда, - "ларчик просто открывался"


 
Игорь Шевченко ©   (2007-10-18 14:54) [7]


> Dispatch - позволяет вызвать только подможество


с id < $C000


 
oxffff ©   (2007-10-18 15:03) [8]


> Игорь Шевченко ©   (18.10.07 14:54) [7]


Именно так. :)

А вот вставка на ASM позволит вызвать все что угодно. :)


 
clickmaker ©   (2007-10-18 15:04) [9]


> А вот вставка на ASM

а прямо в машинных кодах - еще больше )


 
oxffff ©   (2007-10-18 15:17) [10]


> clickmaker ©   (18.10.07 15:04) [9]
>
> > А вот вставка на ASM
>
> а прямо в машинных кодах - еще больше )


В моей памяти только  asm Z80  LDIR  это 237,176.
Если не ошибаюсь. Давно это было.
Было дело я так программировал.
Кассета с отладчиком была испорчена.
Приходилось на цифрах мучиться, особенно интересно было с условными и безусловными переходами.


 
oxffff ©   (2007-10-18 15:22) [11]

Потом я купил за две бутылки водки в 9 классе у своего одноклассника
книгу по защищенному режиму i386.
До сих пор стоит на полке.


 
Игорь Шевченко ©   (2007-10-18 15:23) [12]

oxffff ©   (18.10.07 15:17) [10]


> В моей памяти только  asm Z80  LDIR  это 237,176.


Э...я до сих пор помню коды команд L ($58), LR ($18), ST ($50), BALR ($05) и многие другие :)


 
Eraser ©   (2007-10-18 15:40) [13]

моню команду $cc ))



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
2-1198055139
kyn66
2007-12-19 12:05
2008.01.20
ADSQuery1.Requery ???


15-1197968507
авыф
2007-12-18 12:01
2008.01.20
вставить функцию в FastReport


2-1198023164
Johnnnnnn
2007-12-19 03:12
2008.01.20
Как найти последнюю пустую ячейку в столбце в Excel?


3-1188547204
emelin
2007-08-31 12:00
2008.01.20
Ole. Работа со справочниками 1С из Delphi


15-1197655294
TUser
2007-12-14 21:01
2008.01.20
Привезли комп