Форум: "Основная";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];
ВнизКак показать юзеру что прога работает и не повисла Найти похожие ветки
← →
falcon_k (2003-01-22 02:09) [0]Приветствую многоуважаемый All!
Поделитесь опытом, как отобразить процесс выполнения проги во время обращения к базе и каких либо вычислений, если этот процесс занимает
некоторое время, а юзеру кажется что прога зависла.
Как вариант выводить ProgressBar по циклу в окне типа "Ждите ответа ...".
Но как это организовать, если главный поток программы занят работай над процессом.
← →
mrcat (2003-01-22 02:14) [1]Например,
Application.ProcessMessage;
← →
Спрашивающий (2003-01-22 02:21) [2]Стандартно- TProgressBar или TGauge можешь не стандартно запустить на время выполнение цикла работу какого нибудь GIF файла или курсор сделай анимированным.............
На счет "если главный поток программы занят" если данный поток и есть цикл так что нельзя в его тело втавить ну скажем
Gauge1.Visible:=True;
For I:=0 To 10 Do begin
Gauge1.MaxValue:=10;
Gauge.Progress:=i;
.............................
end;
Gauge1.Visible:=False;
← →
falcon_k (2003-01-22 02:36) [3]2mrcat
Application.ProcessMessage во все места не вставишь.
Например Query1.Open, а выполняется большой и долгий запрос
на сервере.
2Спрашивающий
В тотже Query1.Open - как вставить?
Почему и прошу поделиться опытом уже готовых решений.
Насчет пробы развых вариантов - много чего перепробовал.
Если прога занята процессом обращения к базе (к примеру) то
на экране даже по таймеру ничего не обновляется.
← →
diks (2003-01-22 02:43) [4]Зачем?.. Так мутить... Бросай на форму 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 03:55) [5]2diks
Тогда в каком месте должно стоять Query1.Open?
Если в этой же кнопке, то пока не выполнится Query1.Open
ProgressBar не обновиться.
← →
Big_Rom (2003-01-22 04:33) [6]приложение в процессе и все у меня так и никто не жалуется
и плюс курсор меняю
← →
Evgeny V (2003-01-22 05:01) [7]Я делал оборащение к базе в отдельном потоке,создавл TThread, в нем было свойство мое типа занят=false, перед обращением к базе его=true. Свойство можно или опрашивать, или при его изменении слать сообщение главному окну, на твое усмотрение.
← →
falcon_k (2003-01-22 05:56) [8]2Evgeny V
Я так и предпологаю, что обращение к базе делать в отдельном
потоке, а ProgressBar обновлять в основном.
Но может есть другие варианты, чтобы изменения ProgressBar
производить в отдельном потоке, а обращение к базе в основном?
← →
Спрашивающий (2003-01-22 06:21) [9]SendMessage(Форма.Handle,wm_Paint,0,0);//это сообщение позволяет
//во время длительных обращений перерисоваться форме
Query1.Open;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c