![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
форма-заставка [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]Смотри в сторону кодовых потоков.