![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли изменять таблицу DMT для класса в runtime? [D6, WinXP]
kshin © (2006-02-15 16:21:00)Имеется ввиду возможна ли подмена адреса динамического метода в DMT на адрес своей функции.
У меня сложилось впечатление что регион памяти доступен только для чтения, в который компилятор заносит эти таблицы.
kshin (2006-02-16 12:56:00) [1]Leonid Troyanovsky © (16.02.06 12:05) [11]
До этого я и сам дошел. И именно обработчик cm_DialogKey для TCustomForm хотелось заменить на примерно такой - же, но в таблице динамических методов.
Может не понятно, но при этом можно не играть в наследование форм, а создавать обычную форму, каждый раз когда это надо при разработке приложения и всего раз включить один модуль, который выполняет подмену клавиши для ВСЕХ форм.
Но раз память под ТДМ read-only, то и дальнейшие рассуждения бессмысленны - следующее по простоте Репозитарий + наследование при добавлении из него.
Игорь Шевченко (2006-02-16 12:29:00) [2]Leonid Troyanovsky © (16.02.06 12:05) [11]
Так это тоже надо для каждой формы писать :))
Leonid Troyanovsky (2006-02-16 12:05:00) [3]
> kshin (16.02.06 11:16) [7]
> Плохишу: OnKeyDown/Press - для каждой формы надо писать
> (копировать) каждый раз, когда создаеш новую форму.
http://rsdn.ru/Forum/?mid=671506
--
Regards, LVT.
Игорь Шевченко (2006-02-16 11:45:00) [4]
> Конкретно - хотел сделать, что бы при работе приложения
> реакция на Enter, была аналогична реакции на Tab
В данном случае лучше использовать хук WH_GETMESSAGE
Плохиш (2006-02-16 11:29:00) [5]
> Плохишу: OnKeyDown/Press - для каждой формы надо писать
> (копировать) каждый раз, когда создаеш новую форму.
> И я не вижу ничего хорошего в том, что модуль формы с модифицированным
> поведением сразу содержит массу написанных обработчиков
> еще без содержания логики касающейся именно этой формы
1. Форма - это тоже класс, к которому применимо понятие наследование
2. Реакции на нажатие кнопок вообще-то тоже относятся к "логике функционирования формы"
3. Может стоит занятся написанием новой оси для своей программы?
kshin (2006-02-16 11:18:00) [6]За ответы всем огромное спасибо.
kshin (2006-02-16 11:16:00) [7]Плохишу: OnKeyDown/Press - для каждой формы надо писать (копировать) каждый раз, когда создаеш новую форму.
И я не вижу ничего хорошего в том, что модуль формы с модифицированным поведением сразу содержит массу написанных обработчиков еще без содержания логики касающейся именно этой формы
evvcom (2006-02-16 11:10:00) [8]
> А если можно поменять защиту, то интересно как?
VirtualProtect
Плохиш (2006-02-16 11:00:00) [9]
> что бы при работе приложения реакция на Enter, была аналогична
> реакции на Tab.
Для этого существует OnKeyDown/Press
kshin (2006-02-16 10:43:00) [10]>Защиту можно поменять, безусловно, непонятно только, какой смысл в таких действиях
Смысл в том что так можно попробовать перехватить все сообщения одоного типа (читай номера), для определенных классов или объектов, не изменяя их код. А если можно поменять защиту, то интересно как?
> "Правильнее" написать потомка и перекрыть в нем ЭТОТ динамический метод.
Это я и так понимаю, но если я не хочу писать наследников всех компонентов для внесения некоторого общего изменения их поведения.
Конкретно - хотел сделать, что бы при работе приложения реакция на Enter, была аналогична реакции на Tab. (Ну и еще кое что)
evvcom (2006-02-16 10:00:00) [11]"Правильнее" написать потомка и перекрыть в нем ЭТОТ динамический метод.
Игорь Шевченко (2006-02-15 16:37:00) [12]
> У меня сложилось впечатление что регион памяти доступен
> только для чтения, в который компилятор заносит эти таблицы.
>
Впечатление правильное. DMT находится в сегменте кода, защищенном от записи. Защиту можно поменять, безусловно, непонятно только, какой смысл в таких действиях
Digitman (2006-02-15 16:26:00) [13]
> У меня сложилось впечатление что регион памяти доступен
> только для чтения
И не только он самый. Да и не "регион" это ..
Мало ли что еще доступно "только для чтения" ..