Создайте форму и поместите на нее логотип, используя компонент Timage. В моем примере я создал форму с логотипом и именем "logoform". Зайдите в настройки проекта и исключите форму их списка "автосоздаваемых" форм.
Затем в вашем файле PROJECT.DPR где-то сразу после ключевого слова begin напишите примерно следующее:
logoform := TLogoform.Create(nil);logoform.Show; { ВНИМАНИЕ! show! НЕ showmodal } .. { Здесь может размещаться код инициализации приложения, например, открытие базы данных... }. . { После блока кода, создающего все ваши формы и передстрочкой Application.Run напишите: } logoform.Hide;logoform.Release; |
Это будет показывать форму с логотипом до тех пор, пока приложение не выполнит инициализационный код и окончательно не запустится.
A вот Алексей () показал более изящный способ:
|
program Project1; uses Forms,Unit1 in 'Unit1.pas' {Form1};ULogo in 'ULogo.pas' {LogoForm}; {$R *.RES} begin Application.Initialize; {до этого момента никаких изменений} with TLogoForm.Create(Application) dotryShow;Update;Application.CreateForm(TForm1, Form1);{GProgress.AddProgress(1); - здесь можно двигать прогресс, если TGaugeили TProgressBar лежат на TLogoForm'е} {если есть еще формы, то Application.CreateForm(TForm2, Form2); и т.д.}finallyFree;end; Application.Run;end. |
После моего хирургического вмешательства осталось всего пять или шесть строк кода, вплетенных в скелет формы. После сравнения моего кода с демо-проектом, поставляемым с Delphi (MastApp), я понял, что мой код много проще.
Я не хочу обвинять автора в том, что он плохо сделал свою работу. Без его помощи этого кода просто бы не существовало. Я нахожу, что изучение чужого кода всегда существенно расширяет и дополняет багаж программиста.
Код производит впечатление, что создание окошка с логотипом в Delphi плевое дело. Ну за дело: сначала, с помощью редактора, создайте форму (лучшим решением будет создание нового проекта в отдельном каталоге) и установите лучшие, на ваш художественный взгляд, значения таких свойств, как позиция, размеры и границы. Затем создайте обработчик события OnDeactivate и добавьте единственную строчку кода, в которой мы освобождаем форму. И, последнее, добавьте секцию initialization с тремя строчками кода, которые создают, выводят и обновляют форму.
Для того, чтобы использовать новое окошко с логотипом, скопируйте получившийся .PAS-файл в каталог с проектом, в котором вы намереваетесь его использовать, и вставьте ссылку на модуль в самую верхнюю часть секции uses. НЕ добавляйте форму к проекту.
Ниже приведен пример кода (форма имеет имя SplashForm, модуль обозван как SPLASH). Мой код добавлен между закомментаренных блоков {>>вставить} и {<<конец вставки}, весь остальной код генерируется Delphi.
TypeTSplashForm = class(TForm)[...labels, bitmaps, и пр., добавляется редактором Delphi...]procedure FormDeactivate(Sender: TObject);end; varSplashForm: TSplashForm; implementation {$R *.DFM} { Это шаманское место. Application.Run в нашем случае вызывает программу деактивации.} procedure TSplashForm.FormDeactivate(Sender: TObject);begin{>>вставить}Free;{<<конец вставки} end; {>>вставить} initializationbeginSplashForm := TSplashForm.Create(nil);SplashForm.Show; { Я не уверен, но причина наличия здесь Update в том, что, как мне кажется, приложение пока не может работать c очередью своих сообщений} SplashForm.Update;end;{<<конец вставки} end. |
В головном модуле после строчки USES (.DPR-файл) просто добавьте "SPLASH," (не заключайте это в кавычки). Это все. Никакой головной боли с таймерами, никаких запусков отдельных приложений. Логотип быстро появляется и остается до тех пор, пока приложение не начнет свою работу.
- Howard Harkness [000747]