Искусственное дыхание, или Оживляем форму- заставку в Delphi XE

Эй, товарищ, больше жизни! 

Вратарская песня

Раз уж мы хотим, чтобы заставка наилучшим образом «презентовала» нашу программу, то давайте добавим ей привлекательности. Пусть она по­является не вдруг, а частями (товарищу Бендеру, конечно, такое решение вряд ли пришлось бы по вкусу, он ведь предпочитал всё сразу!), а для этого воспользуемся функцией WindowsAPIAnimateWindow, которая «аними­рует» окно при появлении на экране и при исчезновении с него:


BOOL AnimateWindow(
HWND hwnd,
DWORD dwTime,
DWORDdwFlags
);

 

hwnd - дескриптор окна, в нашем случае для всех окон приложения это Handle.

dwTime- продолжительность эффекта в миллисекундах. dwFlags- константа, определяющая вид эффекта (может состоять из од­ного или нескольких флагов, соединённых логическим оператором OR): AW_HIDE- если указан этот флаг, то окно исчезает с экрана, если нет, то появляется;

 

Эффекты анимации:

AW_SLIDE- окно выдвигается по направлению, задаваемому флагом направления анимации (кроме AW_CENTER). Используется по умолчанию. Если флаг не задан, то изображение не выскальзывает, а раскручивается;

AW_BLEND- окно проявляется или угасает.

 

Направление анимации:


AW_CENTER- окно появляется из центра. Флаги направления не дей­ствуют;
AW_HOR_POSITIVE- окно появляется слева направо. Не действует с AW_CENTERи AW_BLEND;
AW_HOR_NEGATIVE- окно появляется справа налево. Не действует с AW_CENTERи AW_BLEND;
AW_VER_POSITIVE- окно появляется сверху вниз. Не действует с AW_CENTERи AW_BLEND;
AW_VER_NEGATIVE- окно появляется снизу вверх. Не действует с AWCENTERи AWBLEND.

Чтобы показать окно без эффектов анимации, можно воспользоваться другой функцией:

BOOL ShowWindow(HWND hWnd, int nCmdShow);

Эффект анимации уместно использовать при появлении окна на экране (событие OnShow) и при исчезновении с оного (событие OnCloseили On- Hide). Пусть у нас «эффектно» появляется и исчезает окно-заставка .

В текст модуля формы Unit2 добавим процедуру:


//ВЫВЕСТИ ОКНО НА ЭКРАН С ЭФФЕКТАМИ АНИМАЦИИ procedureTfrmSplash.FormShow(Sender: TObject); begin
AnimateWindow(Handle, DURATION, AW_CENTER);
//AnimateWindow(Handle, DURATION, AW_BLEND);
//AnimateWindow(Handle, DURATION, AW_SLIDE);
//AnimateWindow(Handle, DURATION, AW_HOR_POSITIVE or AW_SLIDE); //AnimateWindow(Handle, DURATION, AW_HOR_POSITIVE); //AnimateWindow(Handle, DURATION, AW_HOR_NEGATIVE or AW_ACTIVATE);
//AnimateWindow(Handle, DURATION, AW_VER_POSITIVE); //AnimateWindow(Handle, DURATION, AW_VER_NEGATIVE); end;

В данном случае окно будет расти из центра к краям - мы используем функцию AnimateWindow(Handle, DURATION, AW_CENTER), но вы може­те поэкспериментировать и с другими аргументами. Например, раском­ментируйте строчки (по очереди), запускайте программу и наблюдайте за появлением формы-заставки на экране.

Но прежде добавьте ещё немного кода в модуль:


Implementation const DURATION: integer=1000;
//СОЗДАТЬ ОКНО В ЦЕНТРЕ ЭКРАНА
procedure TfrmSplash.FormCreate(Sender: TObject); begin
left:= (screen.Width-width) div 2; top:= (screen.Height-height) div 2; end;

Подберите значение константы DURATIONпо своему вкусу, а затем допи­шите выделенную строку в процедуру, которая убирает форму с экрана, - теперь она будет исчезать гораздо эффектней, стягиваясь («коллапсируя») к центру:


//УБРАТЬ ФОРМУ, КОГДА КОНЧИТСЯ ВРЕМЯ
procedure TfrmSplash.FormHide(Sender: TObject); begin repeat
Application.ProcessMessages; until frmSplash.CloseQuery;
AnimateWindow(Handle, DURATION, AW_CENTER or AW_HIDE)
end; 
 

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

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