Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как показать юзеру что прога работает и не повисла [D6]


falcon_k ©   (2003-01-22 02:09:00) 

Приветствую многоуважаемый All!

Поделитесь опытом, как отобразить процесс выполнения проги во время обращения к базе и каких либо вычислений, если этот процесс занимает
некоторое время, а юзеру кажется что прога зависла.
Как вариант выводить ProgressBar по циклу в окне типа "Ждите ответа ...".
Но как это организовать, если главный поток программы занят работай над процессом.


Спрашивающий   (2003-01-22 06:21:00) [1]

SendMessage(Форма.Handle,wm_Paint,0,0);//это сообщение позволяет
//во время длительных обращений перерисоваться форме
Query1.Open;


falcon_k   (2003-01-22 05:56:00) [2]

2Evgeny V
Я так и предпологаю, что обращение к базе делать в отдельном
потоке, а ProgressBar обновлять в основном.
Но может есть другие варианты, чтобы изменения ProgressBar
производить в отдельном потоке, а обращение к базе в основном?


Evgeny V   (2003-01-22 05:01:00) [3]

Я делал оборащение к базе в отдельном потоке,создавл TThread, в нем было свойство мое типа занят=false, перед обращением к базе его=true. Свойство можно или опрашивать, или при его изменении слать сообщение главному окну, на твое усмотрение.


Big_Rom   (2003-01-22 04:33:00) [4]

приложение в процессе и все у меня так и никто не жалуется
и плюс курсор меняю


falcon_k   (2003-01-22 03:55:00) [5]

2diks
Тогда в каком месте должно стоять Query1.Open?
Если в этой же кнопке, то пока не выполнится Query1.Open
ProgressBar не обновиться.


diks   (2003-01-22 02:43:00) [6]

Зачем?.. Так мутить... Бросай на форму Progressbar и кнопку
на кнопку брось

procedure TForm1.ButtonXClick(Sender: TObject);
var
i:Integer;
begin
for i:=0 to 100 do
begin
ProgressBar1.Position:=ProgressBar1.Position+1;
Sleep(100);
end;

И напиши типа ждите окончания процесса...


falcon_k   (2003-01-22 02:36:00) [7]

2mrcat
Application.ProcessMessage во все места не вставишь.
Например Query1.Open, а выполняется большой и долгий запрос
на сервере.

2Спрашивающий
В тотже Query1.Open - как вставить?

Почему и прошу поделиться опытом уже готовых решений.
Насчет пробы развых вариантов - много чего перепробовал.
Если прога занята процессом обращения к базе (к примеру) то
на экране даже по таймеру ничего не обновляется.


Спрашивающий   (2003-01-22 02:21:00) [8]

Стандартно- TProgressBar или TGauge можешь не стандартно запустить на время выполнение цикла работу какого нибудь GIF файла или курсор сделай анимированным.............
На счет "если главный поток программы занят" если данный поток и есть цикл так что нельзя в его тело втавить ну скажем
Gauge1.Visible:=True;
For I:=0 To 10 Do begin
Gauge1.MaxValue:=10;

Gauge.Progress:=i;
.............................
end;
Gauge1.Visible:=False;


mrcat   (2003-01-22 02:14:00) [9]

Например, Application.ProcessMessage;


Наверх

Титульная страница Поиск, карта сайта Написать письмо