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

Вниз

Заставка к проге   Найти похожие ветки 

 
Eduard ©   (2002-02-11 11:51) [0]

Здравствуйте, уважаемые мастаки !
Заделал я-таки программу, решил для украшения сделать к ней заставку, которая появляется при запуске проги. Вот как это выглядит:

Код потока:

type
TSplashThread = class(TThread)
destructor Destroy; override;
private
procedure ShowSplash;
protected
procedure Execute; override;
end;

implementation uses uSplash;


var SplashForm: TSplashForm;

{ TSplashThread }

destructor TSplashThread.Destroy;
begin
if SplashForm <> nil
then
begin
SplashForm.Hide;
SplashForm.Free;
end;
inherited;
end;

procedure TSplashThread.Execute;
begin
repeat
Synchronize(ShowSplash);
until Terminated;
end;

procedure TSplashThread.ShowSplash;
begin
SplashForm := TSplashForm.Create(nil);
SplashForm.Position := poScreenCenter;
SplashForm.Show;
SplashForm.Update;
end;

end.


Код проекта:

SplashThread := TSplashThread.Create(False);
SplashThread.Priority := tpIdle;
SplashThread.FreeOnTerminate := False;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
SplashThread.Terminate;
SplashThread.Free;
Application.Run;


Так вот, почему-то заставка появляется только после выполнения команды Application.Run, и вылазит, соответственно вместе с главной формой проекта. Как сделать так, чтобы она отображалась и исчезала вовремя, а также корректно перерисовывалась ?


 
BlankAlex ©   (2002-02-11 12:22) [1]

Посмотри на королевсиве Delphi - Hello world, статья "Обобщающие примеры работы с WinAPI"


 
Eduard ©   (2002-02-11 14:01) [2]

Читал я эту статейку. Проблема заключается в том, что заставка, выведенная таким образом, не будет перерисовываться при закрытии ее другими окнами. Надо, чтобы прорисовка и отображение заставки происходило именно в отдельном потоке. Есть какие-то мысли по этому поводу ?


 
NY152   (2002-02-11 14:10) [3]

Может я чего не понял, но зачем для заставки так усложнять ?
У меня на OnCreate главной формы стоит код:
Splash:=TSplash.Create(Application);
Splash.Show;
Application.ProcessMessages;
Sleep(2000);
Splash.Free;
И всё работает как часы.... А на форму Splash вставляешь нужную картинку и делаешь её без границ... какие проблемы ???


 
Eduard ©   (2002-02-11 15:03) [4]

Ерунда это все. Надо, чтобы было по уму: чтобы заставка реально перерисовывалась, и удалялась именно в момент отображения главной формы приложения, или после этого (как в Photoshop). Кроме того, мне хочется разобраться с созданием потоков. Если кто знает, как отобразить заставку именно в потоке, перед выполнением Application.Run, помогите, плиз !!!


 
pasha_golub ©   (2002-02-11 15:11) [5]

Событие onCreate вызывается до Application.Run!


 
Eduard ©   (2002-02-11 15:42) [6]

>> pasha_golub

Недопонял. Поподробнее можно ?


 
Юрий Зотов ©   (2002-02-11 16:02) [7]

> Eduard © (11.02.02 14:01)

Все правильно. Просто статья предназначалась для начинающих и я специально не стал усложнять ее, надеясь на обычный ProcessMessages.

Конечно, нормальный Splash должен работать в отдельном потоке. Но тогда придется обратиться к "чистому" API, поскольку VCL дает цикл выборки сообщений лишь для одного потока (в Application.Run).

Практически в проекте нужно написать оконную функцию и функцию потока. Последняя регистрирует класс окна, назначает ему эту оконную функцию, создает само окно и организует цикл выборки сообщений. Далее нужно просто вызвать CreateThread.


 
Станислав ©   (2002-02-11 16:43) [8]

Application.Initialize;
form11:=Tform11.create(application);
form11.show; // это и есть форма заставки
form11.update;
Application.Title := "Податкова накладна";
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm5, Form5);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(Tfirmu, firmu);
Application.CreateForm(TForm13, Form13);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm8, Form8);
Application.CreateForm(TForm6, Form6);
Application.CreateForm(TForm7, Form7);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm9, Form9);
Application.CreateForm(TForm10, Form10);
Form11.close; // закрываем ее
Application.Run;
и не гемороимся


 
Pete ©   (2002-02-11 16:47) [9]


Splash:=TSplash.Create(Application);
Splash.Show;
Splash.Update;
Sleep(2000);
Splash.Free;
.
.
.
Aplication.Run

И вообще лучше самому создавать и уничтожать формы, а не пользоваться AutoCreate и не забивать память. Вообщем, это мое мнение...



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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
7-90687
Andry
2001-11-17 21:12
2002.02.28
Результат работы DOS программы.


3-90447
Geoquest
2002-01-29 13:55
2002.02.28
Еще раз о чтении таблиц Paradox в DELPHI


7-90688
Dimonf
2001-11-20 17:48
2002.02.28
Как написать прогу для посылки SMS с компьютера через мобильный телефон.


14-90667
Lamok(real)
2002-01-10 15:07
2002.02.28
Сколько денег затребовать ?


3-90501
AlderMan
2002-02-01 17:39
2002.02.28
Многомерные таблицы