Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.30;
Скачать: CL | DM;

Вниз

Как показать юзеру что прога работает и не повисла   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
1-96677
Opryshok
2003-01-19 23:39
2003.01.30
Если я унаследовал одну форму от другой, то ...


1-96853
Старина Герасим
2003-01-21 10:17
2003.01.30
Подскажите, пожалуйста, как написать резидентную прогу.


3-96540
rom900
2003-01-14 07:27
2003.01.30
Помогите, пожалуйста, составить SQL-запрос


1-96762
stenya
2003-01-15 18:34
2003.01.30
Как рабочее приложение запихнуть в DLL?


7-97068
Оля
2002-11-18 12:58
2003.01.30
Как погасить экран?