Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];

Вниз

Директива 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.073 c
2-1197973757
Kolan
2007-12-18 13:29
2008.01.20
Что возвращает функция EditConnectionString?


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


2-1198141918
SKIPtr
2007-12-20 12:11
2008.01.20
Как узнать об изменении CheckBox


3-1189282732
Fin
2007-09-09 00:18
2008.01.20
dbf и Юникод


2-1198140185
namco
2007-12-20 11:43
2008.01.20
программа из delphi





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