Анимация без лишних усилий
Сегодня
мы поговорим о том, как достичь красивой анимации. Для этого не нужно писать
килобайты кода или строить программу на технологии Flash. Отличные результаты
можно получить используя только функции WinAPI или возможности Delphi. Я
рассмотрю несколько таких необычных возможностей, причем самый большой пример
будет состоять из менее чем 10 (!) строк кода.
Альфа-смешивание
Для
того, что бы сделать форму полу-прозрачной не надо использовать какие либо
компоненты. Не надо даже прописывать ни строчки кода. Что бы сделать форму
полу-прозрачной, достаточно присвоить значению TForm.AlphaBlend := true и
AlphaBlendValue меньшее чем 255. Чем меньше будет значение AlphaBlendValue, тем
прозрачнее будет форма. Можно манипулировать этими значениями и создавать
интересные эффекты с помощью циклов. Вот, например, как можно создать красивый
эффект при активации формы:
Form1.AlphaBlend := true;
Form1.AlphaBlendValue := 100;
Form1.Show;
for i := 100 to 255 do
begin
Form1.AlphaBlendValue := i;
Application.ProcessMessages;
end;
Следует
заметить, что эффект не будет плавным на слабых машинах.
AnimateWindow
В
предыдущем примере я показал, как с помощью цикла плавно вывести форму на
экран. Для достижения почти такого же эффекта можно воспользоваться WinApi
функцией AnimateWindow. Функции передается 3 параметра: hWnd : THandle -
дескриптор окна, которое нужно анимировать; dwTime : Cardinal = время, на
протяжении которого будет продолжаться анимация окна; dwFlags : Cardinal; -
флаги, определяющие способ анимации. Пример:
AnimateWindow
(Form1.Handle, 1000, AW_BLEND);
Form1.Show;
Помимо
флага AW_BLEND есть ещё несколько флагов, с помощью которых можно достичь
довольно впечатляющие результаты:
AW_HOR_POSITIVE
- анимирует форму слева направо
AW_HOR_NEGATIVE
- анимирует форму справа налево
AW_VER_POSITIVE
- анимирует форму сверху вниз
AW_VER_NEGATIVE
- анимирует форму снизу вверх
AW_CENTER
- анимирует форму из центра
С
помощью этой технологии удобно демонстрировать слайды. А если одновременно ещё
и использовать альфа-смешивание, то получится очень впечатляюще.
Дырявая форма
При
использовании компонента TShape можно сделать в форме дырку. Положите на форму
TShape и присвойте свойству Brush.Color := clGreen. А если ещё и присвоить
свойству формы FormStyle := fsStayOnTop то через форму можно не только смотреть
на то, что находите позади неё, но и нажимать на кнопки, редактировать текст и
т.п. Трюк "Летающие кнопки": расположите TShape на форму (Shape := stRectangle,
Brush.Color := clRed), присвойте свойству Align := alClient и присвойте
свойству формы BorderStyle = bsNone. Далее добавьте на форму кнопки и другие
элементы управления.
Масштабирование
Ну
и на последок я расскажу про полезную возможность масштабирования. Само
масштабирование производит метод ScaleBy класса TForm. Свойства PixelPerInch и
Scaled позволяют Delphi автоматически изменять размер формы в случае если
приложение запускается с использованием системного шрифта другого размера. Сам
метод масштабирует только содержимое формы, если вы хотите, что бы рамер формы
тоже масштабировался вместе с элементами управления, то установите свойство
AutoScroll := false.
Список литературы
Для
подготовки данной работы были использованы материалы с сайта http://www.soch.imperium.by