Форум: "Прочее";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
ВнизСтранности с ShowModal Найти похожие ветки
← →
Real © (2008-03-13 19:19) [0]Ситуация примерно такая: главная форма (f1) со списком элементов, по клику вызывается редактор элемента (f2.showmodal) при внесении изменений и нажатию на "сохранить" нужно: скрыть f1 и f2 и отобразить форму (f3), на которой отображается индикатор сохранения (процесс минимум на минуту, редактируются данные на FTP). И вот что происходит: если я с формы f2 отображаю f3 с помощью showmodal, то вызовы f1.hide и f2.hide не срабатывают, а исчезают формы уже после того как закончится процесс редактирования. Repaint форм помогает, но не для f1 :) Вообщем вопрос такой: насколько вообще корректно скрывать формы (hide) из которых был сделан вызов showmodal другой формы? И как вообще лучше организовать такой процесс отображения нескольких окон с showmodal? В принципе, не обязательно f3.showmodal - если удасться скрыть f1 и f2 то можно сделать и f3.show. Понимаю что в чем то я туплю, но не знаю точно где копать :)
← →
boa_kaa © (2008-03-13 19:46) [1]здесь нет ничего странного
нужно в f1 обработать возвращаемое значение от f2, из нее же спрятать себя и показать f3
← →
den303 © (2008-03-14 00:01) [2]ИМХО, имеет смысл закрыть f2, после спрятать f1 и показывать f3. Либо юзать Show для f2 вместо ShowModal.
Просто первая форма не активна, пока не отработает вторая форма - ибо ShowModal
← →
Real work (2008-03-14 13:53) [3]
> ИМХО, имеет смысл закрыть f2, после спрятать f1
ИМенно так и делаю, но f2.close не дает результатов: форма остается видна. Попробую сегодня повторить этот эффект в тестовом приложении и заброшу исходник
← →
clickmaker © (2008-03-14 14:02) [4]...
f2 := TForm2.Create;
try
Res := f2.ShowModal;
finally
f2.Free;
end;
if (Res = mrOk) then
begin
f1.Hide;
f3.Show;
end;
?
← →
Real © (2008-04-03 02:42) [5]
> clickmaker ©
Все так и работает, и в том числе без проверки ModalResult. Сделал тестовый проект. Понял в чем загвоздка: форма не скрывается, если после вызова скрытия есть еще действия (а у меня именно так) Вообщем это вполне логично :) У меня сейчас так: код обеспечивающий редактирование, выполняется в обработчике кнопки, который закрывает f2 (то есть, я скрываю модальную форму редактора и начинаю выполнять код редактирования в этом же обработчике, пытаясь отобразить ход выполнения на f3. И конечно хотелось бы чтоб при этом, на экране на время операции редактирования было видно только f3, а после окончания - закрыть f3 и отобразить f1). То есть как я понял, пока процедура-обработчик закрытия окна не завершится полностью, закрытие не сработает? Никогда об этом не думал, по простой причине - впервые с таким сталкиваюсь.
Тогда подскажите где именно выполнять само редактирование, ход которого нужно отобразить на f3 (остальные до конца операции скрыты). Можно конечно привязаться к событию OnShow формы f3, но это уж совсем как то ужасно мне кажется.
Чтоб было понятнее о чем речь, по ссылке ниже - тестовый пример с тремя формами. В кнопке Save второй формы - выполняется псевдо-редактирование на пару секунд: в это время можно наблюдать что f2 не закрывается пока идет "редактирование". Если закоментировать операцию - то тогда все отрабатывается корректно.
http://www.azlab.org/download/showm.rar
← →
Real © (2008-04-03 02:46) [6]Ну вот пока писал понял что после получения ModalResult и надо запустить редактирование, попутно отобразив f3 :) Но все же интересно узнать, никак нельзя выполнить код в самом обработчике?
← →
Real © (2008-04-03 03:09) [7]Все, разобрался окончательно, ветку можно удалить или просто забить на нее :)
P.S. Не первый раз замечаю, что как только запостишь какую-нить проблему на делфимастер, решение приходит само в течении следующих десяти минут :) Прям мистика какая-то
← →
den303 © (2008-04-03 10:04) [8]
> Real © (03.04.08 03:09) [7]
> как только
> запостишь какую-нить проблему на делфимастер, решение приходит
> само в течении следующих десяти минут :)
Это верно! :o)
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 8.227 c