Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.036 c
14-1102075590
euru
2004-12-03 15:06
2004.12.26
Class Helpers (.NET)


8-1096480482
Riddler
2004-09-29 21:54
2004.12.26
Как проиграть midi файл


1-1103047048
mixamixa
2004-12-14 20:57
2004.12.26
Пузырьковая сортировка.


1-1102946209
Илья
2004-12-13 16:56
2004.12.26
GetMem функция


1-1102945000
ruslanyd
2004-12-13 16:36
2004.12.26
Форма как фрейм





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский