![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как показать юзеру что прога работает и не повисла [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;