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

Чтение книги онлайн.

Читать онлайн книгу Delphi. Трюки и эффекты - Александр Чиртик страница 3

Жанр:
Серия:
Издательство:
Delphi. Трюки и эффекты - Александр Чиртик

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

приложения на Панели задач). Поэтому даже при неудачном вызове функции SetForegroundWindow приложение, нуждающееся во внимании, не останется незамеченным.

      1.2. Окно приложения

      Обратите внимание на то, что название приложения, указанное на кнопке, расположенной на Панели задач, совпадает в названием проекта (можно установить на вкладке Application диалога Project options, вызываемого командой меню Project → Options), но не с заголовком главной формы приложения. Взгляните на приведенный ниже код, который можно найти в DPR-файле (несущественная часть опущена).

      program…

      begin

      Application.Initialize;

      Application.CreateForm(TForm1, Form1);

      Application.Run;

      end.

      В конструкторе класса TApplication, экземпляром которого является глобальная переменная Application (ее объявление находится в модуле Forms), происходит неявное создание главного окна приложения. Заголовок именно этого окна отображается на Панели задач (кстати, этот заголовок можно также изменить с помощью свойства Title объекта Application). Дескриптор главного окна приложения можно получить при помощи свойства Handle объекта Application.

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

      Для подтверждения вышесказанного можно отобразить главное окно приложения, используя следующий код (листинг 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;

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