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

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

Можно ли изменять таблицу 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]


> У меня сложилось впечатление что регион памяти доступен
> только для чтения


И не только он самый. Да и не "регион" это ..
Мало ли что еще доступно "только для чтения" ..


Наверх

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