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

Вниз

THread again   Найти похожие ветки 

 
Andrey V. ©   (2004-02-08 10:31) [0]

Что хотелось бы :
Есть форма с кнопкой.
По нажатию на кнопку начинает выполняться некая работа, причем форма
изчезает (HIDE) а на ее месте возникает маленькая формочка с каким-н.
анимированным гифом (типа , ждите). Ну и в обратном порядке.

Что получается :
Форма с гифом показывается (RX AnimatedImage) , но анимации нет.
Причем если какой-нибудь Проводник распахнуть на весь экран, а потом
свернуть, то на месте этой формы - белое пятно. И так до тех пор пока не
закончится Работа.

Как я делаю :
На главной форме в онклик кнопки
procedure TMainForm.BitBtn1Click(Sender: TObject);
begin
MyQuery := TThreadQuery.Create(True);
Тут процедура делающая большую работу;

Текст Нити я уже честно , говоря раскурочил пока добивался желаемого,
но суть в том , что форма с анимацией создается и кажется в DoWork.
Кстати пробовал использовать TAnimate. Все вроде нормально - мультик показывает ,
но категорически не дает доступа к форме , в смысле мышью не перетащиш .

Наведте на правильную дорогу


 
TUser ©   (2004-02-08 10:56) [1]

Application.ProcessMessages


 
Andrey V. ©   (2004-02-08 11:16) [2]

Навставлял везде - не идет.


 
Verg ©   (2004-02-08 11:24) [3]


> Как я делаю :
> На главной форме в онклик кнопки
> procedure TMainForm.BitBtn1Click(Sender: TObject);
> begin
> MyQuery := TThreadQuery.Create(True);
> Тут процедура делающая большую работу;


Непонятно. Где "тут"?
А чем же тогда MyQuery занимается?


 
Polevi ©   (2004-02-08 13:45) [4]

приведи код поточной ф-ии


 
Polevi ©   (2004-02-08 13:45) [5]

там у тебя Synchronize(DoWork) присутствует скорее всего


 
Andrey V. ©   (2004-02-08 14:41) [6]

Вот приблизительно , так . Приблизительно потому что в поисках решения я тут менял все и так и этак. Возможно это самый неправильный вариант .

constructor TThreadQuery.Create(bb:boolean);
begin
inherited Create(bb);
Priority:=tpHigher ;
FreeOnTerminate := True;
WaitForm:=CreateForm(TWaitForm, WaitForm);
Resume;
end;

destructor TThreadQuery.Destroy;
begin
inherited;
end;

procedure TThreadQuery.DoWork;
begin
WaitForm.RxGIFAnimator1.Animate:=True;
application.processmessages;
WaitForm.show;
end;

procedure TThreadQuery.OnTerminate ;
begin
WaitForm.Free;
end;

procedure TThreadQuery.Execute;
begin
synchronize(DoWork);
Suspend;
end;


 
Polevi ©   (2004-02-09 09:27) [7]

ты понимаешь что делает Synchronize ?


 
Digitman ©   (2004-02-09 09:27) [8]


> Тут процедура делающая большую работу;


вот эту самую процедуру и следует вынести в доп.код.поток, т.е. вызывать ее в контексте метода TThreadQuery.Execute

а осн.код.поток, запустив TThreadQuery, стартует анимацию и продолжает ждать событий польз.интерфейса


 
real_dimedrol   (2004-02-09 13:52) [9]

Прежде чем задавать вопрос, нужно его четко сформулировать.
Пока народ пытается сказать то, что при работе метода, вызванного через synchronize, все потоки кроме текущего "спят". То бишь не обрабатывают сообщения и вообще ничего не делают.


 
Тимохов ©   (2004-02-09 13:58) [10]

Полностью согласен с Digitman © (09.02.04 09:27) [8].
У тебя основной поток занят (большой работой). А фоновый, вызывающий application.processmessages, не может дождаться основного, т.к. тот занят (большой работой).



Страницы: 1 вся ветка

Текущий архив: 2004.02.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
11-53435
Dimaxx
2003-06-03 21:22
2004.02.17
Как у Toolbar а получить вертикальную полоску


3-53385
13-ый
2004-01-18 17:36
2004.02.17
Сортировка по 2-м направлениям


1-53618
garry79
2004-02-07 12:31
2004.02.17
Как двигать мешающую мне форму при отладке?


1-53621
Budy
2004-02-07 10:41
2004.02.17
Cos, Sin, Tg, Ctg


14-53729
_none_
2004-01-29 00:03
2004.02.17
зачем мтс ввели цензуру в смс-ках?