Блокирующее окно?
Есть прога выполняющая много всяких расчетов, хотелось бы на это время вывести окошко сообщающее, что мол идет работа, при этом нужно блокировать лишние телодвижения пользователя. Проблема в том, что если окно выводить через ShowModal, то программа блокируется до его закрытия, а Show не запрещает ввод в основное окно программы???
Hi All.
Есть прога выполняющая много всяких расчетов, хотелось бы на это время вывести окошко сообщающее, что мол идет работа, при этом нужно блокировать лишние телодвижения пользователя. Проблема в том, что если окно выводить через ShowModal, то программа блокируется до его закрытия, а Show не запрещает ввод в основное окно программы???
Когда нужно параллельно работать с интерфейсом и вести сложные расчеты, советую создать отдельный поток для расчетов.
Когда нужно параллельно работать с интерфейсом и вести сложные расчеты, советую создать отдельный поток для расчетов.
Поток это конечно хорошо, но уж слишком запарно, особенно когда прога уже готова, может можно как ни будь по другому?
Не совсем ясно, что ты хочешь.
Если нет параллельных потоков и вычисления выполняются внутри ShowModal, то как пользователь может его закрыть ?
Заменить курсор на часики, и вычисляй себе спокойно - пользователь никуда не дернется :)
Разве что Ctrl+Alt+Del или Reset :D
Конечно есть минусы - окно не будет перерисовываться, что не красиво и напрягает юзеров, которым кажется, что прога зависла.
Здесь спасают либо потоки (что правильно), либо периодические вызовы Application->ProcessMessages() (что обычно проще и соответственно быстрее реализовать).
Hi All.
Есть прога выполняющая много всяких расчетов, хотелось бы на это время вывести окошко сообщающее, что мол идет работа, при этом нужно блокировать лишние телодвижения пользователя. Проблема в том, что если окно выводить через ShowModal, то программа блокируется до его закрытия, а Show не запрещает ввод в основное окно программы???
Извините ... не зная сути программы сложно придумать что-то кроме двух вариантов:
1. Создать функцию которая при необходимости переведет все элементы на экране в состояние Enabled=false, и создать булевую переменную которая будет определять возможность закрытия программы на данный момент. (сложно представить что в такой ситуации сможет сделать пользователь лишнего)
2. В окне которое появляется по ShowModal ты можешь в событии OnActivate прописать все те расчеты что должна программа сделать за время блокировки или вызывать оттуда функцию другого окна которая и выполнит расчеты... по завершении этой функции окно у тебя должно закрыться и все :)
Есть еще варианты но они как мне кажется сложнее...