Форма-заставка в Delphi XE

Форма-заставка (splashscreen) часто используется при загрузке больших программ для того, чтобы развлечь пользователя интересной картинкой, сообщить ему полезную информацию о программе, об адресах и сайтах производителя, наконец, призвать к регистрации программы. Вы, конечно, много раз видели такие заставки - они появляются при установке про­грамм и запуске MSWordCorelDrawAdobePhotoshopили Delphi.

Форма-заставка в Delphi XE

 

Вы и сами можете включить в свой проект заставку ничуть не хуже любой «фирменной».

Возьмём за основу нашего проекта познавательную программу, с помощью которой мы успешно вычисляли жирность человеческого тела. Загрузите её в Delphiи скопируйте все файлы в новую папку Plot- на этот раз мы займёмся расчётом плотности человеческого тела (на самом деле - удель­ного веса, но для практических нужд всё едино).

Она близка к плотности воды (1 г на куб. см) и зависит от соотношения количества жира (плотность 0,890 г на куб. см) и мускулов (плотность 1,100 г на куб. см). Формула для подсчёта средней плотности человеческо­го тела такова:

p= (8,90 xzh+ 11 х (100 - zh)) г/см3.

Легко видеть, что в интерфейсе предыдущей программы нужно сделать минимальные изменения:

Свойство Captionформы - Плотность тела Captionметки Label2 - Плотность тела (г/куб.см) =

Name lblZhir - IblPlot,а её Caption - 1.05.

 

Остальные элементы на форме - те же, что и раньше

 

 Форма-заставка в Delphi XE

Естественно, придётся поработать и с кодом модуля формы. ле privateнужно объявить процедуру, вычисляющую плотность тела:


 private
{private declarations}
procedure Plot;

Внимательный читатель должен был заметить, что до этого нужные зна­чения вычислялись в функции и затем возвращались в вызывающую её процедуру. Но ещё более внимательный читатель, безусловно, обратил внимание и на то, что дальше они использовались совершенно одинаково - просто выводились на экран. Приходилось одни и те же действия повто­рять в каждой процедуре. На этом можно сэкономить - будем показывать вычисленное значение там же, где мы его вычисляем. И так как теперь возвращать ничего не нужно, то функцию следует превратить в процеду­ру:

 
//ВЫЧИСЛИТЬ ПЛОТНОСТЬ ТЕЛА procedureTForml.Plot;
var
v, zh, p: single; begin
//вычислить жирность тела:
 
if RadioGroup1.ItemIndex= 0 then begin //- мужской пол v:= (rost*3 - 450 + age) * 0.25 + 45; zh:= (ves - v) / ves * 100 + 15 end else begin                          
//-                                      женскийпол
v:= (rost*3 - 450 + age) * 0.225 + 40.4; zh:= (ves - v) / ves * 100 + 22 end;
//скорректировать значения: if zh< 0 then zh:= 0; if zh> 100 then zh:= 100;
//вычислить плотность тела: p:= 8.90 * zh + 11 * (100 - zh);
p:= p 1000;
lblPlot.Caption:= copy(floattostr(p),1,4); 
end;

Вам нужно только добавить выделенные строки, чтобы получить достой­ный результат. Математике вас, конечно, учить не надо, а касательно по­следней строки можно кое-что сказать: в ней число pпреобразуется в строку, из которой выделяются только первые 4 знака, чтобы избавиться от длинной вереницы совершенно бесполезных цифр.

По понятным причинам (беда, если вы их не поняли!) все строчки


//вычислить жирность:
lblZhir.Caption:= inttostr(round(zhir))

следует заменить строчками:


//вычислить плотность:
Plot

Запускайте на радость ближним своим новое приложение и проверяйте, утонут ли они в воде (пресной), как и подобает культурному человеку, или будут плавать на поверхности - подобно пресловутому батончику MilkyWay. Только не удивляйтесь, что никакой заставки вы не увидели - её и нет.

 

Если жажда новизны ещё не оставила вас, то давайте продолжим мудрить в области программирования. Прежде всего, добавьте к проекту новую пу­стую форму (о том, как это сделать, говорилось уже много раз), назовите ее frmSplash(или как угодно по-другому) и сохраните проект на диске.

 

У сплаш-формы свойство BorderStyleнужно установить в bsNone, чтобы убрать полосу заголовка вместе с кнопками. Размеры и оформление фор­мы могут быть любыми. Неплохо смотрится подходящая картинка в рам­ке, для которой годится компонент Panel(найдите его в Палитре компо­нентов!) со свойствами:

Align = alClient Bevellnner = bvLowered Color = clSilver

и компонент Bevel(для горизонтальной полоски под рисунком) со стра­ницы Additional:

Left= 0 Height= 2 Style= bsRaised

На панель поместите компонент Image, а в него загрузите заранее приго­товленную картинку. Для прояснения ваших намерений подпишите кар­тинку (компонент Label). В итоге в окне Конструктора формы вы увидите такую заставку для вашей программы:

Форма-заставка в Delphi XE

 

Так как большинство ваших программ будет загружаться настолько быст­ро, что заставка успеет только мелькнуть на экране, то нам следует поза­ботиться о продлении её бренного существования. Отмерять срок её жиз­ни удобно с помощью компонента Timer. Щёлкните дважды на его значке:

Форма-заставка в Delphi XE

в Палитре компонентов, и он появится на форме.

 

Ещё одна особенность форм-заставок состоит в том, что их нужно созда­вать самостоятельно, а не автоматически. Поэтому выполните команду Главного меню Project> Options... и в диалоговом окне ProjectOptions, на странице Formsвыделите название формы-заставки в левом списке и, нажав кнопку 0, перенесите его в правый список AvailableForms.

Ваша форма не будет создаваться автоматически при запуске про­граммы, теперь это ваша забота.

Форма-заставка в Delphi XE

А где вы должны сделать это? При создании главной формы? - Но заставка должна появиться до того! И вот тот редкий случай, когда придётся «лезть» в файл проекта. Выполните команду Главного меню Project> ViewSource, файл проекта откроется в окне Редактора кода. Допишите в него выделенные строчки:


program Project1;
uses 
Forms, 
Unitl in 'Unitl.pas'
{Form1},
Unit2 in 'Unit2.pas'
{frmSplash};
{$R *.RES} 
begin 
frmSplash := TfrmSplash.Create(Application);
frmSplash.Show;
frmSplash.Update;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
frmSplash.Hide;
frmSplash.Free;
Application.Run;
end.

 Смысл их действия таков. Создаём форму-заставку и отрисовываем её, чтобы она появилась на экране. Затем выполняем стандартные операции по инициализации приложения и, когда всё готово к его запуску, убираем форму-заставку с экрана и выгружаем её из памяти компьютера (и из сво­ей собственной).

 

Мы должны учесть ещё два обстоятельства. Во-первых, нужно поместить заставку в центре экрана (установите свойство Positionв poDesktopCenter), во-вторых, нужно задержать её на экране, так как обычное приложение за­гружается очень быстро. Для этого нужно написать такой код в модуле формы-заставки:


unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type
TfrmSplash = class(TForm)
Panel1: TPanel;
Bevel1: TBevel;
Label1: TLabel;
Image1: TImage;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boole­an);
procedure FormHide(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmSplash: TfrmSplash; implementation {$R *.DFM}
//ВЫКЛЮЧИТЬ ТАЙМЕР, ЕСЛИ ВРЕМЯ ЗАКОНЧИЛОСЬ procedure TfrmSplash.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:= False end;
//МОЖНО ЛИ ЗАКРЫТЬ ФОРМУ?
procedure TfrmSplash.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:= Timer1.Enabled = False end;
//УБРАТЬ ФОРМУ, КОГДА КОНЧИТСЯ ВРЕМЯ procedure TfrmSplash.FormHide(Sender: TObject);
begin
repeat
Application.ProcessMessages; until frmSplash.CloseQuery end; 
end.

 Обязательно увеличьте значение свойства Intervalтаймера до 4000-5000 мс (в Инспекторе объектов). В этом случае форма-заставка просуществует на экране 4 или 5 секунд. Поначалу свойство Enabledтаймера равно True, и он включится при появлении заставки на экране. После отсчёта установ­ленного интервала времени таймер выключится, и свойство Enabledпри­мет значение False.За этим внимательно следит процедура FormHide, обрабатывающая со­бытие OnHide, вызываемое при выполнении процедуры frmSplash.Hide. В ней проверяется, можно ли закрыть форму-заставку, а «добро» на это даёт процедура TfrmSplash.FormCloseQuery, которая ждёт, пока таймер отра­ботает заданное время.Вот теперь ваше приложение обязательно предъявит пользователю свою «визитную карточку»!

������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: