Программирование в Delphi. Трюки и эффекты. Александр Чиртик. Читать онлайн. Newlib. NEWLIB.NET

Автор: Александр Чиртик
Издательство:
Серия:
Жанр произведения: Программирование
Год издания: 2010
isbn: 978-5-49807-118-3
Скачать книгу
программы (сочетание положения ползунка tbAlpha, состояния флажка chkEnableAlpha и подписи lblCurAlpha на форме, представленной на рис. 1.2) (листинг 1.8).

Листинг 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 при включенном параметре прозрачности окон).

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

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

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

      Рассматриваемые эффекты по изменению формы окон базируются на использовании