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

Вниз

Визуализация занятости приложения.   Найти похожие ветки 

 
lamer6666   (2013-01-02 20:21) [0]

Доброго времени суток уважаемые.
Подскажите, как реализовать визуализацию занятости приложения, т.е. пока например идет загрузка показать полупрозрачное окно (закрывающее основное окно программы) с крутящимся gif-ом "загрузка" ну или просто надпись, "ожидайте....".


 
Юрий Зотов ©   (2013-01-02 22:09) [1]

1. Загрузку данных выносим в отдельный поток (см. класс TThread)
2. Делаем новую форму. На нее кладем TLabel ("Ожидайте") и TAnimate.
3. Из основной формы показываем вторую (ShowModal)
4. В OnCreate второй формы запускаем поток загрузки данных.
5. Когда поток завершится, сработает обработчик OnTerminate (во второй форме). В нем пишем ModalResult := mrOK.


 
Юрий Зотов ©   (2013-01-02 22:12) [2]


> 4. В OnCreate второй формы...

Это если вторая форма создается динамически (что лучше). А если нет, то не в OnCreate, а в OnShow (что хуже).


 
lamer6666   (2013-01-02 22:48) [3]

Понял, разбираю.
Огромное спасибо.


 
lamer6666   (2013-01-07 02:49) [4]


> Это если вторая форма создается динамически (что лучше)


Реализовал так:

type
 TForm1 = class(TForm)
...
...
...
 procedure StartThreadOnShow(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

TLoad = class(TThread)
 private
   memorystream: TMemoryStream; //сюда гружу к примеру картинку
   procedure SetMemorystream;
 protected
   procedure Execute; override;
 end;

...
...
...

//Процедуры
procedure TLoad.Execute;
begin
 memorystream:=TMemoryStream.Create;
...
...
...
 Synchronize(SetMemorystream); //Отдаю в основной поток полученную картинку
 memorystream.Free;
end;

procedure TLoad.SetMemorystream;
var
 jpeg: TJPEGImage;
begin
 jpeg:=TJPEGImage.Create;
 memorystream.Position:=0;
 jpeg.LoadFromStream(memorystream);
 Form1.Image1.Picture.Graphic:=jpeg;
 jpeg.Free;
end;

procedure TForm1.StartThreadOnShow(Sender: TObject);//Процедура запуска потока захвата картинки
 var
 PT:TLoad;
begin
 PT:=TLoad.Create(True);
 PT.FreeOnTerminate:=True;
 PT.Priority:=tpLower;
 //PT.OnTerminate:=??? Тут не могу реализовать закрытие динамически созданной формы
 PT.Resume;
end;
//Процедуры

...
...
...

procedure TForm1.SpeedButton0Click(Sender: TObject);//Запускаю
 var
 LoadingForm:TForm;
begin

 LoadingForm:=TForm.Create(self);
 LoadingForm.BorderStyle:=bsNone;
 LoadingForm.WindowState:=wsMaximized;
 LoadingForm.OnShow:=StartThreadOnShow;//Стартую поток
 LoadingForm.ShowModal;
...


правильно ли реализовано? В реале у меня все работает.

Проблема: Не могу назначить процедуру событию OnTerminate созданного потока.
Прописать процедуру в Form1? Но тогда будет закрываться Form1 а не LoadingForm.


 
Юрий Зотов ©   (2013-01-07 11:03) [5]

1. LoadingForm сделать не локальной переменной, а полем формы TForm1.
2. Обработчик события OnTerminate потока прописать в Form1.
3. В нем пишем: LoadingForm.ModalResult := mrOK.


 
lamer6666   (2013-01-07 13:43) [6]

Огромное спасибо за подсказки! Теперь все работает на ура! )))


 
Юрий Зотов ©   (2013-01-07 14:02) [7]


> lamer6666   (07.01.13 13:43) [6]
> все работает на ура!

Значит, пришло время сменить ник.
:o)


 
lamer6666   (2013-01-07 16:01) [8]


> Значит, пришло время сменить ник.

Подумываю над этим ))), но до вас ПРОФФИ мне далековато еще!


 
sniknik ©   (2013-01-07 21:17) [9]

> Значит, пришло время сменить ник.
на lamer6667?
:)



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

Форум: "Начинающим";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
2-1357713143
Crusader
2013-01-09 10:32
2013.09.22
очистка StringList


15-1365798603
Юрий
2013-04-13 00:30
2013.09.22
С днем рождения ! 13 апреля 2013 суббота


15-1365885002
Юрий
2013-04-14 00:30
2013.09.22
С днем рождения ! 14 апреля 2013 воскресенье


15-1365507314
Copyrighter
2013-04-09 15:35
2013.09.22
Регистрация ПО


2-1357671425
hansa
2013-01-08 22:57
2013.09.22
Собственник визуальных компонент





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский