Delphi. Трюки и эффекты. Александр Чиртик

Delphi. Трюки и эффекты - Александр Чиртик


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

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

Листинг 1.5. Показываем окно приложения

      procedure TForm1.Button1Click(Sender: TObject);

      begin

      SetWindowPos(Application.Handle, 0, 0, 0, 200, 100,

      SWP_NOZORDER or SWP_NOMOVE);

      end;

      В результате ширина окна станет равной 200, а высота – 100, и мы сможем посмотреть на главное окно. Кстати, можно заметить, что при активизации этого окна (например, щелчке кнопкой мыши на заголовке) фокус ввода немедленно передается созданной первой, то есть главной, форме.

      Теперь должно стать понятно, почему не мигала кнопка приложения при использовании функций FlashWindow или FlashWindowEx. Недостаток этот можно легко устранить, например, следующим образом (листинг 1.6).

Листинг 1.6. Мигание кнопки приложения на Панели задач

      procedure TForm1.Button2Click(Sender: TObject);

      var

      fl: FLASHWINFO;

      begin

      fl.cbSize:= SizeOf(fl);

      fl.hwnd:= Application.Handle;

      fl.dwFlags:= FLASHW_ALL;

      fl.uCount:= 10;

      fl.dwTimeout:= 200;

      FlashWindowEx(fl);

      end;

      В данном случае будет одновременно инвертироваться заголовок окна приложения. Убедиться в этом можно, предварительно применив листинг 1.5. Наконец, чтобы добиться одновременного мигания кнопки приложения на Панели задач и заголовка формы (произвольной, а не только главной), можно применить листинг 1.7.

Листинг 1.7. Мигание кнопки приложения и инверсия заголовка формы

      procedure TForm1.Button3Click(Sender: TObject);

      var

      fl: FLASHWINFO;

      begin

      //Мигание кнопки

      fl.cbSize:= SizeOf(fl);

      fl.hwnd:= Application.Handle;

      fl.dwFlags:= FLASHW_TRAY;

      fl.uCount:= 10;

      fl.dwTimeout:= 200;

      FlashWindowEx(fl);

      //Инверсия заголовка

      fl.cbSize:= SizeOf(fl);

      fl.hwnd:= Handle;

      fl.dwFlags:= FLASHW_CAPTION;

      fl.uCount:= 10;

      fl.dwTimeout:= 200;

      FlashWindowEx(fl);

      end;

      В данном случае инвертируется заголовок формы Forml. Кнопка на Панели задач может не только мигать, но и, например, быть скрыта или показана, когда в этом есть необходимость. Так, для скрытия кнопки приложения можно применить API-функцию ShowWindow следующим образом:

      ShowWindow(Application.Handle, SW_HIDE);

      Чтобы показать кнопку приложения, можно ту же функцию ShowWindow вызвать со вторым параметром, равным SW_NORMAL.

      1.3. Полупрозрачные окна

      В Windows 2000 впервые появилась возможность использования прозрачности окон (в англоязычной документации такие полупрозрачные окна называются Layered windows). Достигается это заданием дополнительного стиля окна (о назначении и использовании оконных стилей можно узнать в гл. 2). Здесь мы не будем рассматривать использование API-функций для работы с полупрозрачными окнами, так как их поддержка реализована для форм Delphi. Соответствующие свойства включены в состав класса TForm.

      • AlphaBlend – включение/выключение прозрачности. Если True, то прозрачность включена, если False, то выключена.

      • AlphaBlendValue – значение, обратное прозрачности окна (от 0 до 255). Если 0, то окно полностью прозрачно, если 255, то окно непрозрачно.

      Значения


Скачать книгу