0 / 0 / 0
Регистрация: 30.01.2012
Сообщений: 20
|
|
1 | |
Показывать форму пользователю с информацией о выполнении длительной задачи19.03.2012, 12:20. Показов 2734. Ответов 16
Метки нет (Все метки)
В проекте есть процедуры которые очень долго выполняются, и что бы пользователь не паниковал когда это происходит (Программа не отвечает), необходимо сделать форму "Думаю", на которой к примеру будет картинка с часами или что-то такое. Есть идеи как это сделать?
0
|
19.03.2012, 12:20 | |
Ответы с готовыми решениями:
16
При первом запуске программы показывать первую форму, а при остальных вторую форму Заполняем форму прокручиваемой информацией пример Показывать форму заданное количество секунд При запуске приложения не показывать форму |
0 / 0 / 0
Регистрация: 30.01.2012
Сообщений: 20
|
|
19.03.2012, 14:58 [ТС] | 3 |
хотелось бы все таки форму с большой надписью "Погоди я думаю!!!", а то программой будут пользоваться люди, которые недавно научились пользоваться ПК))
0
|
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
|
|
19.03.2012, 15:14 | 4 |
перед процедурой открываешь форму, после процедуры закрываешь, и все.
Правда от зависонаэто не спасет, но зато будет видно что приложение работает, а насчет зависона можешь попробовать вставить в процедуру Application.ProcessMessages или выполнять ее в отдельном потоке.
1
|
0 / 0 / 0
Регистрация: 30.01.2012
Сообщений: 20
|
||||||
19.03.2012, 15:25 [ТС] | 5 | |||||
Думал про потоки, но с ними ни разу не связывался, не знаю как том что делается, на счет формы тоже думал, ее нужно открывать с помощью ShowModal, иначе при нажатии на другую форму она за нее переместится.
Ну походу придется разбираться с потоками, иначе, я думаю, нормально этого не сделать
0
|
498 / 251 / 56
Регистрация: 16.06.2011
Сообщений: 904
|
|
19.03.2012, 18:58 | 6 |
Однозначно потоки.
0
|
0 / 0 / 0
Регистрация: 30.01.2012
Сообщений: 20
|
|
19.03.2012, 19:01 [ТС] | 7 |
тогда тут другая проблема, если форма будет открываться с помощью ShowModal то на главной форме будет не доступна кнопка закрыть или свернуть, а это тоже не желательно
0
|
0 / 0 / 0
Регистрация: 30.01.2012
Сообщений: 20
|
|||||||||||
26.03.2012, 15:12 [ТС] | 8 | ||||||||||
Если кому-нибудь еще интересно, то есть такой выход:
Нужно открывать форму "Думаю" поверх остальных форм, но не в модальном режиме (.ShowModal) т.к. после открытия формы процедура перестанет выполнятся пока форма не закроется. На форме "Думаю)" ставим таймер с интервалом 1 (наверно нужен, без него не пробовал) и в него пишем:
Код вызова процедуры:
0
|
498 / 251 / 56
Регистрация: 16.06.2011
Сообщений: 904
|
||||||||||||||||
27.03.2012, 06:51 | 9 | |||||||||||||||
Лучше использовать потоки, и показывать ход выполнения программы любым индикатором (TPRogressBar, например). Работа с потоками:
1) File - New - Other - Delphi Files - Thread Object; // (Delphi 2010) 2) подключить потоковый модуль в главной форме (ALT + F11) 3) пишешь необходимые (долговременно работающие ) процедуры в теле потока и самое главное: если процедуры потока работают с визуальными компонентами твоей Form1, процедуры необходимо запускать в режиме синхронизации (тогда не будет наблюдаться эффекта "подвисания" программы):
5) запуск самого потока, например, как в твоем случае, из Form1 будет выглядеть так:
0
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
27.03.2012, 07:42 | 10 |
А чего просто не вставить в форму большую панель поверх остальных элементов с надписью "Думаю". Во время DesignTime установить свойство Visible:=FALSE. Когда нужно Visible:=TRUE пока ведутся расчёты. И все дела.
Можно панель разрисовать под фориу с кнопками и т.п.
0
|
0 / 0 / 0
Регистрация: 30.01.2012
Сообщений: 20
|
|
27.03.2012, 09:50 [ТС] | 11 |
Можно но не в моем проекте. там в главном окне открываются дочерние формы и вот это как раз происходит долго, а панель будет под ними. ну и когда буду интерфейс менять или еще что-то такое, панель будет мешать. Кстати по тестировал программу, SetWindowPos(formMain.Handle,Handle,Left,Top,Width,Height,SWP_NOACTIVATE Or SWP_NOMOVE Or SWP_NOSIZE); это вроде не надо, так как программа когда думает виснет и форма не исчезнет за другую)
Добавлено через 1 минуту А на счет потоков. Пробовал с прогресс баром как то так: 1. Создание и Запуск потока который двигает прогресс бар 2. Выполнение процедуры ... Почему то прогресс бар начинал двигаться после того как процедура выполнится, хотя код брал с какого-то форума и там у всех все работало
0
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
27.03.2012, 12:09 | 12 |
Я в своём проекте использовал окно выдачи сообщений об ошибках. Создавал ещё одну форму на этапе проектирования, ставил Visible в False. И показывал её когда нужно. При этом свободно работал в другой форме. Другая форма - это другой поток. Можешь на ней ставить хоть таймер, рисовать часы. Установить, чтобы она всегада была на переднем плане. К её событиям из основной формы обращался через Form2. У меня сейчас под рукой нет исходников - вечером, если никто до этого не подскажет, пропишу какого типа была эта форма и как её вывести на передний план.
0
|
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
|
|
27.03.2012, 12:39 | 13 |
Поглядите работу программы Picasa при самодобавлении файлов.
Отдельный поток - самый лучшый выход.
0
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|||||||||||
27.03.2012, 17:57 | 16 | ||||||||||
Выкладываю, как и обещал описание для формы "Окно ошибок" с которой я работал:
На этапе разработки:
0
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
31.03.2012, 20:11 | 17 |
Вот пример кода архив. Там в основной форме после нажатия кнопки выдаётся окно и зацикливается. После нажатия кнопки во втором окне - цикл в первом окне прерывается.
0
|
31.03.2012, 20:11 | |
31.03.2012, 20:11 | |
Помогаю со студенческими работами здесь
17
Как создать форму с прокручиваемой информацией на сайте? При нажатии на Ctrl+Space показывать форму Показывать кнопки только авторизованному пользователю Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |