Форум: "Основная";
Текущий архив: 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.039 c