Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

форма-заставка [D6, Win2k]


denis24 ©   (2004-12-07 12:40:00) 

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

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


jack128   (2004-12-08 21:10:00) [1]

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

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


denis24   (2004-12-08 20:08:00) [2]

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


jack128   (2004-12-08 18:39:00) [3]

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


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

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


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

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


jack128   (2004-12-07 22:05:00) [6]

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


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

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

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

end;


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

> 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;


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

Делаю так
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 не крутится анимир гиф,который запущен точно.Проверял создавая эту форму без вызова процедуры

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


KSergey   (2004-12-07 15:49:00) [10]

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


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

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


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

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


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

Помогите еще.
Добавил в проэкт 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:00) [14]

Помогите еще.
Добавил в проэкт 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:15:00) [15]

Помогите еще.
Добавил в проэкт 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)

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


Anatoly Podgoretsky   (2004-12-07 12:43:00) [16]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо