Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.004 c
7-90681
viksoft
2001-11-04 14:17
2002.02.28
Как отформатировать винт (HDD) ?


1-90584
Beer
2002-02-11 11:14
2002.02.28
Отчет в Excel..


1-90577
Павел2
2002-02-12 10:24
2002.02.28
загрузка DLL с файл сервера


3-90462
Vacheslav
2002-02-01 17:44
2002.02.28
Такая проблемма


4-90706
Death
2001-12-27 02:02
2002.02.28
XPDesign





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