Форум: "Основная";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];
ВнизЗаставка к проге Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c