![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
ShadeSt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
Маленькая предистория:
В существующем проекте используется следующая схема создания форм:
Описание проблемы: На форме GRID_FORM есть TActionList в котором есть несколько TAction для обработки горячих клавиш (ShortCut) При сборке проекта в Delphi 7 действие горячих клавиш распространялось только на форму GRID_FORM (т.е. форму владельца TActionList) При переходе на Delphi 2007 схема обработки горячих клавиш ломается, и они начинают ловиться в дочерних формах, что приводит к очень нежелательным последствиям. На просторах интернета упоминание нашли тут Shortcuts dispatched recursively in Delphi2007 Пример проблемы: В приложенном к данному сообщению файлику лежит исходный код тестового проекта и несколько собранных версий - одна в D7, другая в D2007. Проект, собранный в D7 особого интереса не представляет, т.к. в нем все работает так, как ожидается. А проект, собранный в D2007 ведёт себя как минимум странно:
Хочется в Delphi 2007 добиться поведения, аналогичного тому, что было... Большая просьба, если кто-нибудь сталкивался с таким - отпишитесь! Так же, если кто-либо знает решение, либо сталкивался с информацией по данному вопросу на просторах интернета - поделитесь решением/ссылками. Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
В D2006 turbu
если написать TempForm := TForm2.Create(Application);//а не self то не будет токого поведение -------------------- Кольцов Виктор Владимирович |
|||
|
||||
ShadeSt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
Frees, в том то и дело, что необходимо именно описанное выше поведение, т.к. в дочерние формы (DATA_EDIT_FORM) в некоторых случаях передаются указатели на область памяти, где лежат данные.
Таким образом закрытие основной формы (GRID_FORM) повлечет освобождение данной памяти и соответственно проблемы в формах (DATA_EDIT_FORM), если они не будут закрываться. Все это криво конечно, если поразмыслить... но по факту так есть. Да и чисто логически форма родитель должна закрывать своих потомков. То, что все формы будут уничтожаться при закрытии приложения - это как-то криво. -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
ShadeSt, TForm2.Create(Application); так создавать формы только GRID_FORM, а DATA_EDIT_FORM с указанием Self в кострукторе
получится закрыв GRID_FORM все DATA_EDIT_FORM закроются Это сообщение отредактировал(а) Frees - 8.9.2008, 06:21 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
ShadeSt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
Frees, спасибо!
Данное решение действительно решает описанную мной проблему. Но тут есть другая проблемка... если ActionList будет на дочерней форме (на DATA_EDIT_FORM), то его ShortCut будет обрабатываться и в GRID_FORM... -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
выход тут один создавать с другим овнером и убивать формы которые породил ручками
-------------------- Кольцов Виктор Владимирович |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |