Главная » Delphi » Красивая заставка в SiideShow

0

Перенесем проект SiideShow из папки Cilaval 1\2 в новую папку (Glaval2\l — естественно, лишние теперь файлы ресурсов, картинку заставки и т. п. переносить не требуется) и изменим номер версии на 1.32. Добавим следующие переменные в секции var модуля zastavka.pas:

fReg:hRGti; tsek:integer = 0; fwidth: integer^SOO; fHeight: integerMOO;

Далее создадим обработчик onCreate формы, и допишем в него следующие процедуры:

procedure TForm2.ForraCreate(Sender: TObject); begin

(задаем с начальными размерами}

fReg:=Crea teRoundRec tRgn(0,0,fWidth,fHeight, 100,100); (регион с закругленными углами)

SetWindowRgr, (Handle, fReg, True);

SetWindowPos(Handle,HWNDjrOP,(Screen.Width div 2)-250,(Screen.Height div 2)-200,500,400,SWP_SHOWWIMDOW); end;

Последний оператор нужен вот зачем— свойство формы Position на будущее лучше изменить на poDesigned, т. к. иначе будет некрасиво, а чтобы изначально форма возникала в центре, пришлось установить ее там принудительно.

Теперь мы изменим интервал компонента Timerl на 1000 (он у нас был установлен в 5000), а затем обработчик по событию onTimer перепишем следующим образом:

procedure TForm2.TimerITimer(Sender: TObject); var fTop, fLeft: .integer;

begin

inc (tsek) ;

if (tseJOl) and (tsek<5) then begin

fWidth:=fWidth+50*(tsek-l)*3; fHeight:=fHeight+40*(tsek-1)*3; fReg:=CreateRoundRectRgn(0,0,fWidth,fHeight,100,100); {регион с закруглённым! углами}

SetWindowRgn(handle,fReg,True); fLeft:=(Screen.Width div 2)-(fWidth div 2); fTop:=(Screen.Height div 2)-(fHeight div 2); SetWindowPos(Handle,HWND_TOP,fLeft,fTop,fWidth,fHeight, SWP_SHOWWINDOW); aRect :=Rect(0,0,fWidth,fHeight); {размеры картинки) Form2 .Canvas. StretchDraw(aRect, Form2 .Braplmage) ; {загружаем картинку в канву формы} end;

if tsek=5 then Timerl.Enabled:=false; end;

Если вы запустите программу (значение параметра Zastavka в INI-файле, естественно, должно быть установлено в True — должен быть установлен флажок на панели установок), то у вас возникнет заставка с полукруглыми краями, которая через две секунды начнет расширяться на весь экран, пока не исчезнет. Самое увлекательное в этом деле— поиграться с формулами для fwidch и fHeight, а также для fLeft и fTop, одновременно меняя интервал таймера и предельное число "тиков", которое у нас тут равно 5. Можно заставить заставку уменьшаться вместо увеличения, дрейфовать ее к краю или к углу экрана и т. п. Можно ввести полигональную фигуру и заставить заставку деформироваться. Но когда вы наиграетесь окончательно, то поймете, что самое главное, что тут выглядело бы по-настоящему уместно, сделать таким образом не получится: а именно заставить окно менять размеры плавно. Не выйдет даже на тех системах, которые все еще не у всякого рядового пользователя имеются, типа Pentium Extreme Edition — даже у них не хватит быстродействия, чтобы заставить окно заставки по-настоящему естественно исчезать с экрана. Но все же, если все тщательно проработать, то можно получить красивые эффекты типа осыпания заставки или ее улетания кувырком в угол. Я оставляю это на усмотрение читателей, а здесь мы на будущее оставим только эффект скругления углов окна, а всю эту анимацию отменим, оставив процедуру Timerl.Timer в том состоянии, в котором она была раньше. На диске в папке Glaval2\l я пока оставил все, как здесь написано, но в следующий раз анимированный вариант будет отменен.

Источник: Ревнч Ю. В.  Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

По теме:

  • Комментарии