Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
3-1197395663
DmitrichJ
2007-12-11 20:54
2008.05.18
MySQL, AnyDac Ошибка с max_allowed_packet


15-1206998230
Германн
2008-04-01 01:17
2008.05.18
Кстати. Поздравляю всех, кто читает мой пост!


3-1197035486
iZEN
2007-12-07 16:51
2008.05.18
Сравнить две СУБД (.mdb)


2-1207667537
kernel
2008-04-08 19:12
2008.05.18
Обработка сообщений (WM_SYSCOMMAND) в консольном приложении


2-1208759834
Виктор
2008-04-21 10:37
2008.05.18
МАС-адресса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский