Вход/Регистрация
Excel. Трюки и эффекты
вернуться

Гладкий Алексей Анатольевич

Шрифт:

Листинг 1.8.

Динамическое изменение прозрачности окна

procedure TForm1.chkEnableAlphaClick(Sender: TObject);

begin

AlphaBlendValue:= tbAlpha.Position;

AlphaBlend:= chkEnableAlpha.Checked;

end;

procedure TForm1.tbAlphaChange(Sender: TObject);

var

pos, perc: Integer;

begin

pos:= tbAlpha.Position;

//Новое значение прозрачности

AlphaBlendValue:= pos;

//Обновим подпись под ползунком

perc:= pos * 100 div 255;

lblCurAlpha.Caption:= IntToStr(pos) + из 255 ( +

IntToStr(perc) + %) ;

end;

Довольно интересный эффект постепенного исчезновения, а затем появления формы можно реализовать, применив следующий код (листинг 1.9).

...

Листинг 1.9.

Исчезновение и появление формы

implementation

var

isInc: Boolean; // Если True, то значение AlphaBlend формы

// увеличивается, если False, то уменьшается

//(форма скрывается)

procedure TForm1.cmbHideAndShowClick(Sender: TObject);

begin

if AlphaBlend then chkEnableAlpha.Checked:= False;

//Включаем прозрачность (подготовка к плавному скрытию)

AlphaBlendValue:= 255;

AlphaBlend:= True;

Refresh;

//Запускаем процесс скрытия формы

isInc:= False;

Timer1.Enabled:= True;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

var val: Integer;

begin

if not isInc then

begin

//"Растворение" окна

val:= AlphaBlendValue;

Dec(val, 10);

if val <= 0 then

begin

//Окно полностью прозрачно

val:= 0;

isInc:= True;

end

end

else begin

//Появление окна

val:= AlphaBlendValue;

Inc(val, 10);

if val >= 255 then

begin

//Окно полностью непрозрачно

val:= 255;

Timer1.Enabled:= False; //Процесс закончен

AlphaBlend:= False;

end

end;

AlphaBlendValue:= val;

end;

Главная сложность приведенного в листинге 1.9 алгоритма кроется в использовании таймера (Timerl) для инициирования изменения прозрачности окна. Так сделано для того, чтобы окно могло принимать пользовательский ввод, даже когда оно скрывается или постепенно показывается, и чтобы приложение не «съедало» все ресурсы на относительно слабой машине. Попробуйте сделать плавное изменение прозрачности в простом цикле, запустите его на каком-нибудь Pentium III 600 МГц без навороченной видеокарты и сами увидите, что станет с бедной машиной.

Грамотное, а главное уместное, использование прозрачности окон может значительно повысить привлекательность интерфейса приложения (взгляните хотя бы на Winamp 5 при включенном параметре прозрачности окон).

1.4. Окна и кнопки нестандартной формы

Сейчас мы рассмотрим некоторые стандартные возможности Windows, которые можно использовать для достижения большего разнообразия и привлекательности элементов оконного интерфейса за счет изменения формы элементов управления и, естественно, самих окон приложений.

Регионы. Создание и использование

Рассматриваемые далее эффекты по изменению формы окон базируются на использовании регионов (областей) отсечения – в общем случае сложных геометрических фигур, ограничивающих область рисования окна. По умолчанию окна (в том числе и окна элементов управления) имеют область отсечения, заданную прямоугольным регионом с высотой и шириной, равн ыми высоте и ширине самого окна.

Однако использование прямоугольных регионов для указания областей отсечения совсем не обязательно. Использование отсечения по заданному непрямоугольному региону при рисовании произвольного окна наглядно представлено на рис. 1.3: а – изначальный прямоугольный вид формы; б – используемый регион, формирующий область отсечения; в – настоящий вид формы в результате рисования с отсечением по границам заданного региона.

Рис. 1.3. Использование области отсечения при рисовании окна

Рассмотрим операции, позволяющие создавать, удалять и модифицировать регионы. Создание и удаление регионов Создать регионы различной формы можно с помощью следующих API-функций:

...

function CreateRectRgn(p1, p2, p3, p4: Integer): HRGN;

function CreateEllipticRgn(p1, p2, p3, p4: Integer): HRGN;

function CreateRoundRectRgn(p1, p2, p3, p4, p5, p6: Integer): HRGN;

Все перечисленные здесь и ниже функции создания регионов возвращают дескриптор GDI-объекта «регион». Он впоследствии и передается в различные функции, работающие с регионами.

Итак, первая из приведенных функций (CreateRectRgn) предназначена для создания регионов прямоугольной формы. Параметры этой функции необходимо толковать следующим образом:

• p1 и р2 – горизонтальная и вертикальная координаты левой верхней точки прямоугольника;

• р3 и р4 – горизонтальная и вертикальная координаты правой нижней точки прямоугольника.

Следующая функция – CreateEllipticRgn – предназначена для создания региона эллиптической формы. Параметры этой функции – координаты прямоугольника (аналогично CreateRectRgn), в который вписывается эллипс.

Третья функция – CreateRoundRectRgn – создает регион – прямоугольник с округленными углами. При этом первые четыре параметра функции аналогичны соответствующим параметрам функции CreateRectRgn. Параметры р5 и рб – ширина и высота сглаживающих углы эллипсов (рис. 1.4).

Трех приведенных функций достаточно даже в том случае, если нужно создавать регионы очень сложной формы. Это достигается при помощи многочисленных операций над простыми регионами, как в приведенном далее примере создания региона по битовому шаблону. Однако рассмотрим еще одну несложную функцию, которая позволяет сразу создавать регионы-многоугольники по координатам точек – вершин многоугольников:

  • Читать дальше
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: