Работаем с окнами. AnimateWindow и FlashWindow.

Сегодня разберемся с такой функцией, как AnimateWindow. Не так давно я о ней даже не подозревал, её возможности меня откровенно порадовали. Ну и FlashWindow за компанию.

[AnimateWindow]

Синтаксис: function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): BOOL;
Функция AnimateWindow служит для анимации объекта (чаще окна, то есть первого уровня) при сокрытии или показе.
Функция работает синхронно, то есть программа, вызвавшая её, замерзает до тех пор, пока анимация не завершится.
Передаваемые параметры
Итак, hWnd это понятное дело handle объекта. К dwTime вернёмся чуть позже.
dwFlags. Тут много чего может быть. Далее рассмотрим возможные константы. Замечу, что их можно, даже нужно комбинировать, используя оператор or.
Константы, да. У них у всех префикс AW. Итак, по возрастанию:
AW_CENTER — разворачиваем из центра.
AW_BLEND — постепенно увеличиваем прозрачность.
AW_HOR_POSITIVE — показываем слева направо (в «позитивном» направлении).
AW_HOR_NEGATIVE — показываем справа налево.
AW_VER_POSITIVE — показываем сверху вниз.
AW_VER_NEGATIVE — показываем снизу вверх.
AW_HOR_POSITIVE or AW_VER_NEGATIVE — слева направо и снизу вверх (по диагонали).
тут я мог написать еще три варианта с AW_HOR_…, но ты о них уже догадался (диагонали).
еще одно, с AW_CENTER и AW_BLEND не выйдет комбинировать (ишь ты, чего захотел, хрен тебе и разворачивание и прозрачность).
AW_HIDE — комбинируем с описанными выше, и всё происходит наоборот: сворачиваем в центр, растворяем и т.д.
AW_ACTIVATE — цитата из msdn: Activates the window. А вот кто их поймёт, я много чего перепробовал, результатов от работы AnimateWindow с данной константой или отличий при комбинировании с ней не увидел. Знаешь — пиши в комментах.
AW_SLIDE — msdn: Uses slide animation. By default, roll animation is used. Тоже заставляет задуматься, у меня не даёт видимых результатов. Про ролики тоже непонятно.
Так-с, на формах оно работает на ура, проверь это сейчас. Как дела обстоят, например, с TButton? А вот как, скрыть с помощью AW_HOR_… или AW_VER_… удалось, а вот показать… Не скажу, что я неудачник, но кто-то что-то явно скрывает.

[FlashWindow]

Синтаксис: function FlashWindow(hWnd: HWND; bInvert: BOOL): BOOL;
Мигаем окном верхнего уровня, handle которого передаем как hWnd. Это если bInvert передаём как true. Делается это, чтобы пользователь обратил внимание. Да, окно при этом не становится активным.
Если передаём False, цитирую msdn: the window is returned to its original state (either active or inactive). Ыыыыыы.
Функция FlashWindow возвращает True, если окно заголовок окна был активным до вызока. Иначе False. Из msdn, не проверял.

Нам важно удобство в работе с окнами. Но удобство и уют в квартире — не менее важная вещь. Особенный уют создаёт пол, например, ламинат pergo expression — чем не важный фактор комфортной жизни?

(c) crystalbit, http://parsers.info

Подпишись на rss и будет очень весело, поверь