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

Вниз

форма-заставка   Найти похожие ветки 

 
denis24   (2004-12-07 12:40) [0]

Подскажите пожалуста!
На основной форме запускается процедура по обработке данных
Перед ее вызовом создаю и вызываю сабж с анимированым гифом
frmWorking_report:=TfrmWorking_report.Create(self);
try
frmWorking_report.Show;
.
.
.
основная процедура
.
.
.
finally
frmworking_reporp.free;
end;

Все отлично ,но этот анимир гиф прокручивается рывками...
подскажите или киньте плиз ссылку по теме форм-заставок на длит процедуры обраьртки данных


 
Anatoly Podgoretsky ©   (2004-12-07 12:43) [1]

Смотри в сторону кодовых потоков.


 
denis24   (2004-12-07 15:15) [2]

Помогите еще.
Добавил в проэкт TthreadObject.(Working_report).Подключил к форме где вызывается процедура по обработке данных.
Перед ее вызовом создаю поток.
Thread1:=Working_report.Create(false);
В потоке создал процедуры по показу и уничтожению формы-заставки.
Thread1.Make_form; в теле которых соотв->frmWorking_report.show;

Thread1.Close_form->frmWorking_report.free;

А где создавать эту форму?В Working_report.Execute не получается(frmWorking_report:=TfrmWorking_report.Create(self)). Пишет
Incopatible types Tcomponent and Working_report)

Или я  что-то не так делаю?


 
denis24   (2004-12-07 15:22) [3]

Помогите еще.
Добавил в проэкт TthreadObject.(Working_report).Подключил к форме где вызывается процедура по обработке данных.
Перед ее вызовом создаю поток.
Thread1:=Working_report.Create(false);
В потоке создал процедуры по показу и уничтожению формы-заставки.
Thread1.Make_form; в теле которых соотв->frmWorking_report.show;

Thread1.Close_form->frmWorking_report.free;

А где создавать эту форму?В Working_report.Execute не получается(frmWorking_report:=TfrmWorking_report.Create(self)). Пишет
Incopatible types Tcomponent and Working_report)

Или я  что-то не так делаю?


 
denis24   (2004-12-07 15:26) [4]

Помогите еще.
Добавил в проэкт TthreadObject.(Working_report).Подключил к форме где вызывается процедура по обработке данных.
Перед ее вызовом создаю поток.
Thread1:=Working_report.Create(false);
В потоке создал процедуры по показу и уничтожению формы-заставки.
Thread1.Make_form; в теле которых соотв->frmWorking_report.show;

Thread1.Close_form->frmWorking_report.free;

А где создавать эту форму?В Working_report.Execute не получается(frmWorking_report:=TfrmWorking_report.Create(self)). Пишет
Incopatible types Tcomponent and Working_report)

Или я  что-то не так делаю?


 
KSergey ©   (2004-12-07 15:33) [5]

Наоборот, в основном потоке создаешь форму, в дополнительном - делаешь необходимые действия.


 
denis24   (2004-12-07 15:43) [6]

Хорошо,а как тогда словить что процедура отработала в дополнительном потоке и пора закрывать эту форму-заставку в основном?


 
KSergey ©   (2004-12-07 15:49) [7]

Послать сообщение из потока перед завершением, например.


 
denis24   (2004-12-07 18:58) [8]

Делаю так
frmWorking_report:=TfrmWorking_report.Create(self);
try
       frmWorking_report.Show;
       Thread1:=Working_report.Create(false);
       code:=Thread1.WaitFor;
finally
       frmWorking_report.Free;
end;
В потоке
procedure Working_report.Execute;
begin
Synchronize(frmChoice_report.make_select_for_report)
end;

Все отлично работает.Но на форме frmWorking_report не крутится анимир гиф,который запущен точно.Проверял создавая эту форму без вызова процедуры

Что то делаю не так?


 
Юрий Зотов ©   (2004-12-07 20:31) [9]

> denis24   (07.12.04 18:58) [8]

> не крутится анимир гиф

Естественно, Вы же вызвали WaitFor - вот основной поток и встал. И ждет дополнительного. А в дополнительном Вы вызвали Synchronize - и он тоже встал. И ждет основного.

И будут они ждать друг друга вечно. Взаимный deadlock это называется.

> Что то делаю не так?

Да. Вы невнимательно читаете справку.

type
 TfrmWorking_Report = class(TForm)
 ...
 public
   procedure Working_ReportFinished(Sender: TObject);
 ...
 end;

procedure TfrmWorking_Report.Working_ReportFinished(Sender: TObject);
begin
 ModalResult := mrOK
end;

======================================

with TWorking_Report.Create(True), TfrmWorking_Report.Create (nil) do
try
 FreeOnTerminate := True;
 OnTerminate := Working_ReportFinished;
 Resume;
 ShowModal
end;

======================================

procedure TWorking_Report.Execute;
begin
 ... // Никаких Synchronize не нужно
end;


 
Юрий Зотов ©   (2004-12-07 20:35) [10]

Недописал немного, сорри. Конечно, форму надо уничтожить:

with TWorking_Report.Create(True), TfrmWorking_Report.Create (nil) do
try
 FreeOnTerminate := True;
 OnTerminate := Working_ReportFinished;
 Resume;
 ShowModal
finally
 Free

end;


 
jack128 ©   (2004-12-07 22:05) [11]

Юрий Зотов ©   (07.12.04 20:35) [10]
красиво :-)


 
denis24   (2004-12-08 09:33) [12]

To Юрий Зотов
Спасибо,то что надо.
Но в процедуре которую я вызываю и запускаю во новом потоке используются ado компоненты.И на них виснет.Там нужно что-то сделать с сессиями.Не подскажете?


 
denis24   (2004-12-08 18:33) [13]

Никто не знает других вариантов?


 
jack128 ©   (2004-12-08 18:39) [14]

CoInitialize вызываешь??


 
denis24   (2004-12-08 20:08) [15]

где его вызывать?


 
jack128 ©   (2004-12-08 21:10) [16]

в потоке.  Если в нем используются ADO Componenets.

procedure TADOThread.Execute;
begin
 CoInitialize(0);
 try
   // тут работаешь с ADO
 finally
   CoUninitialize
 end;
end;



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

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

Наверх




Память: 0.5 MB
Время: 0.04 c
9-1093136923
Xerx
2004-08-22 05:08
2004.12.26
Аналог Blitz3D


1-1102717713
Bobby Digital
2004-12-11 01:28
2004.12.26
Memo


14-1102311556
Чеширский Кот из Гондураса
2004-12-06 08:39
2004.12.26
Позвольте представиться


1-1102587453
Dmitrij_K
2004-12-09 13:17
2004.12.26
DLL


14-1102058907
Igor_thief
2004-12-03 10:28
2004.12.26
Tootips