Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];

Вниз

Модальная форма   Найти похожие ветки 

 
zz 5 ©   (2005-10-03 12:51) [0]

Всем доброго дня. При выполнении длительных операций в программе, причем в разных режимах выводится форма с прогресс-бар. Как ее вывести, чтобы, пока она не закроется, пользователь не мог с нее уйти и работать с программой, т.е. сделать ее модальной, но при этом не передовать ей управление. Заранее спасибо.


 
TUser ©   (2005-10-03 13:00) [1]

Сделай ее модальной и убери все способы ее закрытия.


 
y-soft ©   (2005-10-03 13:01) [2]

>zz 5 ©   (03.10.05 12:51)  

А вы правильно понимаете, что такое модальность окна?

Это всего лишь значит, что родительское окно становится недоступным для пользовательского ввода, но отнюдь не останавливает цикл его оконной процедуры...


 
zz 5 ©   (2005-10-03 14:48) [3]

>y-soft ©   (03.10.05 13:01) [2]

Когда я вызываю окно с помощью ShowModal управление переходит в модальное окно, как мне потом, допустим, из родительского окна работать с модальным, например, увеличить значение прогресс-бар ?
Надо: 1) При старте длительной операции показать модальное окно 2) При выполнении операции постепенно наращивать значение прогресс-бар


 
y-soft ©   (2005-10-03 15:04) [4]

>zz 5 ©   (03.10.05 14:48) [3]

Вы имеете в виду, что ShowModal не возвращает управление до тех пор, пока модальное окно не закроется?

Ну так в Ваших руках сам код этой модальной формы. Т.е. Вы можете всю необходимую обработку производить там. Но для Windows более естественным способом является вынесение длительной операции в отдельный поток...

Еще один довольно часто используемый вариант - использование не модальной, а псевдомодальной формы. Т.е. вызываете не ShowModal, а Show а затем до конца операции делаете главную форму недоступной (Enabled := False)...


 
y-soft ©   (2005-10-03 15:22) [5]

>>zz 5 ©   (03.10.05 14:48) [3]

Еще немного.

Если Ваша длительная операция атомарная, т.е. не возвращает управления до полного завершения, то, чтобы не "замораживать" программу, выход один - выносить ее в отдельный поток...

Если же операция состоит из большого кол-ва более мелких опраций, то не забывайте после каждой вызывать Application.ProcessMessages, иначе прогресс будет перерисовываться скачками...


 
zz 5 ©   (2005-10-03 17:35) [6]

>>zz 5 ©   (03.10.05 14:48) [5]

Сам склоняюсь в сторону потоков, но пока нужно быстрое решение, потому что переделка всех режимов, а их не мешьше пятидесяти, займет продолжительное время.
Спасибо за ответы, попробую пока MainForm.Enabled := False


 
Плохиш ©   (2005-10-04 00:13) [7]

При показе формы с процессбаром послать себе сообщение, в обработчике этого сообщения выполнить необходимые действия.


 
zz 5 ©   (2005-10-04 10:05) [8]

>> Плохиш ©   (04.10.05 00:13) [7]
Это немного не то, так как придется писать для каждой длительной операции свой обработчик. Сейчас у меня такой порядок
ShowProgressForm // показ модальной формы
try
 for I := 1 to 43 do
 begin
   // операция
   IncProgressFormPos // Увеличение значенея позиции прогресс-бара модальной формы
 end;
finally
 CloseProgressForm
end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.044 c
2-1128425114
Ugrael
2005-10-04 15:25
2005.10.30
форматы дат


8-1117665158
TechnoDreamer
2005-06-02 02:32
2005.10.30
Autolevels, autocolor и autocontrast


2-1128601635
koks
2005-10-06 16:27
2005.10.30
Как запретить одновременный запуск нескольких копий пронграммы


14-1128828112
тихий вовочка
2005-10-09 07:21
2005.10.30
Google Earth, наши военные базы и статуя Свободы


4-1124890056
Forb
2005-08-24 17:27
2005.10.30
Как править приложение в памяти





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский