Страница 1 из 2

Модальные формы

Добавлено: 27 дек 2006, 18:34
Лелик_1044
Есть главная форма - ГЛАВ
Модальная форма вызываемая из ГЛАВ - 1МОДАЛ
Модальная форма вызываемая из 1МОДАЛ - 2МОДАЛ

Иногда возникает ошибка (не могу повторить действия) когда сворачиваешь приложения или меняешь фокус или ВИН+Д и потом меняешь фокус

То получается что если вызвать 1МОДАЛ, а потом 2МОДАЛ, то 2МОДАЛ будет за 1МОДАЛ, которая не доступна приходится закрывать по альт+ф4

Как этого избежать???

Re: Модальные формы

Добавлено: 28 дек 2006, 06:57
SergeyS
Какая делфи? Я попробовал в 2006, подобной ошибки не возникало
Если есть возможность вышли исходники

Re: Модальные формы

Добавлено: 28 дек 2006, 07:54
devi409
Лелик писал(а):Есть главная форма - ГЛАВ

То получается что если вызвать 1МОДАЛ, а потом 2МОДАЛ, то 2МОДАЛ будет за 1МОДАЛ, которая не доступна приходится закрывать по альт+ф4

Как этого избежать???
Для отображения формы можно воспользоваться несколькими путями.
1. из главной формы вызываешь 1МОДАЛ.Visible:=true либо 1МОДАЛ.Show
при этом можно с легкостью переключаться между формами.
2. 1МОДАЛ.Showmodal;
при этом вызываемая форма станомится модальной и переключиться на главную форму нельзя пока не закроется 1МОДАЛ

Re: Модальные формы

Добавлено: 28 дек 2006, 11:45
Лелик_1044
Все формы создается динамически
Дельфа 6
Операционка хп
Исходники очень большие могу если надо чсать, где идет создание формы
У меня надо шоумодал потому что нельзя делать ничего другого пока не выберет параметры. Да и выглядит будет смешно если разрушить родителя модальной формы

Re: Модальные формы

Добавлено: 28 дек 2006, 12:08
somewhere
Тут либо у 2МОДАЛ надо ставить Parent'ом при Create - 1МОДАЛ, либо для 2МОДАЛ установить fsStayOnTop, хотя не очень рационально. В твоем случае 1МОДАЛ и 2МОДАЛ равноценные модальные окна если у них один и тот же родитель, думаю Parent должен исправить проблему

P.S. У меня при любом подходе таких проблем не наблюдалось как с автокриейчеными формами так и созданными вручную - возможно в одной из форм какая-то проперть связана с подоробного рода ньюансами отображения.

Re: Модальные формы

Добавлено: 28 дек 2006, 12:46
Лелик_1044
Я недаром спросил про операционку. Иногда на 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 надо попробовать

Re: Модальные формы

Добавлено: 28 дек 2006, 13:04
Blood_Magic
У меня тоже бывают такие баги, это похоже сама ХР глючит. Воспроизвести ситуацию не возможно. Каким-то фигом модальное окно оказывается позади главного и если главное окно полностью закрывает модальное, то сразу и не вьедишь что случилось. Такая ситуация возникает раз в пол года со всеми приложениями. Выдвинут модальное окно вперед можно нажав Alt+Ctrl+Del и в диспетчере задач нажать "Переключиться" ;)

Re: Модальные формы

Добавлено: 28 дек 2006, 22:28
Игорь Акопян
или Alt-Space, DownArrow, Enter и далее стрелками вытащить его наружу, если конечно форма не на весь экран...
А вообще Модал из Модала - моветон :-/
Как вариант
Можно сделать Show а чтобы не закрыли родителя - сделать ему Hide ;)

Re: Модальные формы

Добавлено: 29 дек 2006, 04:44
SergeyS
Согласен, вызывать модал из модала...
Лелик, попробуй построить новое тестовое приложение с эмуляцией своих модальный формочек, проверь как работают (без основного функционала, только открытие формочек). Раз тебя данная проблема достала, значит на твоей машине она случается достаточно часто. Протестируй работу данного тестового приложения, повторяется ли ошибка? Если повторяется, то вышли исходники, я их откомпилирую в Delphi2006 и вышлю тебе проверить работу откомпилированного приложения на твоей системе, если ошибка исчезнет то значит делфи 6 глючит, если останется, то ... хз, но можно будет ещё подумать.

Re: Модальные формы

Добавлено: 29 дек 2006, 10:56
Лелик_1044
Не меня это не достала.
Эти заказчики умудрились так за тестить
что я раза с 10 только повторил этуошибку и то не знаю как