Модальные формы
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Есть главная форма - ГЛАВ
Модальная форма вызываемая из ГЛАВ - 1МОДАЛ
Модальная форма вызываемая из 1МОДАЛ - 2МОДАЛ
Иногда возникает ошибка (не могу повторить действия) когда сворачиваешь приложения или меняешь фокус или ВИН+Д и потом меняешь фокус
То получается что если вызвать 1МОДАЛ, а потом 2МОДАЛ, то 2МОДАЛ будет за 1МОДАЛ, которая не доступна приходится закрывать по альт+ф4
Как этого избежать???
Модальная форма вызываемая из ГЛАВ - 1МОДАЛ
Модальная форма вызываемая из 1МОДАЛ - 2МОДАЛ
Иногда возникает ошибка (не могу повторить действия) когда сворачиваешь приложения или меняешь фокус или ВИН+Д и потом меняешь фокус
То получается что если вызвать 1МОДАЛ, а потом 2МОДАЛ, то 2МОДАЛ будет за 1МОДАЛ, которая не доступна приходится закрывать по альт+ф4
Как этого избежать???
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Для отображения формы можно воспользоваться несколькими путями.Лелик писал(а):Есть главная форма - ГЛАВ
То получается что если вызвать 1МОДАЛ, а потом 2МОДАЛ, то 2МОДАЛ будет за 1МОДАЛ, которая не доступна приходится закрывать по альт+ф4
Как этого избежать???
1. из главной формы вызываешь 1МОДАЛ.Visible:=true либо 1МОДАЛ.Show
при этом можно с легкостью переключаться между формами.
2. 1МОДАЛ.Showmodal;
при этом вызываемая форма станомится модальной и переключиться на главную форму нельзя пока не закроется 1МОДАЛ
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Все формы создается динамически
Дельфа 6
Операционка хп
Исходники очень большие могу если надо чсать, где идет создание формы
У меня надо шоумодал потому что нельзя делать ничего другого пока не выберет параметры. Да и выглядит будет смешно если разрушить родителя модальной формы
Дельфа 6
Операционка хп
Исходники очень большие могу если надо чсать, где идет создание формы
У меня надо шоумодал потому что нельзя делать ничего другого пока не выберет параметры. Да и выглядит будет смешно если разрушить родителя модальной формы
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Тут либо у 2МОДАЛ надо ставить Parent'ом при Create - 1МОДАЛ, либо для 2МОДАЛ установить fsStayOnTop, хотя не очень рационально. В твоем случае 1МОДАЛ и 2МОДАЛ равноценные модальные окна если у них один и тот же родитель, думаю Parent должен исправить проблему
P.S. У меня при любом подходе таких проблем не наблюдалось как с автокриейчеными формами так и созданными вручную - возможно в одной из форм какая-то проперть связана с подоробного рода ньюансами отображения.
P.S. У меня при любом подходе таких проблем не наблюдалось как с автокриейчеными формами так и созданными вручную - возможно в одной из форм какая-то проперть связана с подоробного рода ньюансами отображения.
It's a long way to the top if you wanna rock'n'roll
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Я недаром спросил про операционку. Иногда на XP при вызове модальных окон разрушается Z-order.
Лечить можно, к примеру, написав обработчик для Application.OnModalBegin такого вида:
procedure TMainForm.AppModalBegin(Sender: TObject);
var
Msg: TMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE or (QS_INPUT shl 16)) do ; //Bugfix с модальными окнами под XP
end;
Если используются MessageBox'ы, то в Forms.pas в функции MessageBox нужно добавить вызов пары Application.ModalStarted в начале и Application.ModalFinished в конце.
Способ проверенный, помогает.
Вот дали на sql.ru надо попробовать
Лечить можно, к примеру, написав обработчик для Application.OnModalBegin такого вида:
procedure TMainForm.AppModalBegin(Sender: TObject);
var
Msg: TMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE or (QS_INPUT shl 16)) do ; //Bugfix с модальными окнами под XP
end;
Если используются MessageBox'ы, то в Forms.pas в функции MessageBox нужно добавить вызов пары Application.ModalStarted в начале и Application.ModalFinished в конце.
Способ проверенный, помогает.
Вот дали на sql.ru надо попробовать
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
-
- Сообщения: 273
- Зарегистрирован: 30 июн 2005, 14:53
У меня тоже бывают такие баги, это похоже сама ХР глючит. Воспроизвести ситуацию не возможно. Каким-то фигом модальное окно оказывается позади главного и если главное окно полностью закрывает модальное, то сразу и не вьедишь что случилось. Такая ситуация возникает раз в пол года со всеми приложениями. Выдвинут модальное окно вперед можно нажав Alt+Ctrl+Del и в диспетчере задач нажать "Переключиться" 

- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
или Alt-Space, DownArrow, Enter и далее стрелками вытащить его наружу, если конечно форма не на весь экран...
А вообще Модал из Модала - моветон :-/
Как вариант
Можно сделать Show а чтобы не закрыли родителя - сделать ему Hide
А вообще Модал из Модала - моветон :-/
Как вариант
Можно сделать Show а чтобы не закрыли родителя - сделать ему Hide


- SergeyS
- Сообщения: 196
- Зарегистрирован: 21 ноя 2006, 17:12
- Откуда: Хакасия, Абакан
- Контактная информация:
Согласен, вызывать модал из модала...
Лелик, попробуй построить новое тестовое приложение с эмуляцией своих модальный формочек, проверь как работают (без основного функционала, только открытие формочек). Раз тебя данная проблема достала, значит на твоей машине она случается достаточно часто. Протестируй работу данного тестового приложения, повторяется ли ошибка? Если повторяется, то вышли исходники, я их откомпилирую в Delphi2006 и вышлю тебе проверить работу откомпилированного приложения на твоей системе, если ошибка исчезнет то значит делфи 6 глючит, если останется, то ... хз, но можно будет ещё подумать.
Лелик, попробуй построить новое тестовое приложение с эмуляцией своих модальный формочек, проверь как работают (без основного функционала, только открытие формочек). Раз тебя данная проблема достала, значит на твоей машине она случается достаточно часто. Протестируй работу данного тестового приложения, повторяется ли ошибка? Если повторяется, то вышли исходники, я их откомпилирую в Delphi2006 и вышлю тебе проверить работу откомпилированного приложения на твоей системе, если ошибка исчезнет то значит делфи 6 глючит, если останется, то ... хз, но можно будет ещё подумать.
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Не меня это не достала.
Эти заказчики умудрились так за тестить
что я раза с 10 только повторил этуошибку и то не знаю как
Эти заказчики умудрились так за тестить
что я раза с 10 только повторил этуошибку и то не знаю как
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.