Работаем с окнами и объектами. Часть 4. Функции и процедуры.

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

Предыдущие части:
Работаем с окнами и объектами. Delphi. Api. Часть 1.
Работаем с окнами и объектами. Часть 2
Работаем с окнами и объектами. Часть 3. Поиск объектов.

Итак, у нас есть handle — уникальный идентификатор объекта. Объект может быть как видимым (visible), так и скрытым от нашего взора, как доступным для ввода (enabled, далее просто доступным), так и наоборот. Рассмотрим четыре похожие друг на друга функции: IsWindow, IsWindowVisible, IsWindowEnabled. И посмотрим, что можно такого натворить.

[IsWindow]

Синтаксис: function IsWindow(hWnd: HWND): BOOL;
Функция IsWindow возвращает True, если мы ей передали handle объекта. Возвращает False, если переданное число не является хэндлом существующего объекта — такое может быть, когда, к примеру, мы получили верный идентификатор раньше, а объекта уже нет.

[IsWindowVisible]

Синтаксис: function IsWindowVisible(hWnd: HWND): BOOL;
То, о чём говорилось выше. Видимое — True, нет — False.

[IsWindowEnabled]

Синтаксис: function IsWindowEnabled(hWnd: HWND): BOOL;
Функция IsWindowEnabled вернёт True если объект активен. Иначе False.

[IsChild]

Синтаксис: function IsChild(hWndParent, hWnd: HWND): BOOL;
Функция IsChild возвращает True, если её передали два хэндла, один из которых (первый, смотри синтаксис) принадлежит родителю, а другой — объекту на нём. False в противном случае.

[IsWindowUnicode]

Синтаксис: function IsWindowUnicode(hWnd: HWND): BOOL;
Я не пользовался, но знай, что бывает и такое. Несложно догадаться, когда и что возвращает.

[EnableWindow]

Синтаксис: function EnableWindow(hWnd: HWND; bEnable: BOOL): BOOL;
Передаём handle окна и True, если хотим сделать его доступным, а иначе False.
Что же функция возвращает?
Функция возвращает True, если окно было до этого неактивно, неважно что мы с её помощью сделали. Иначе False.

[ShowWindow]

Синтаксис: function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL;
Передаём опять же наш handle и некую численную константу.
Возможные константы:
SW_HIDE — скрываем объект.
SW_SHOWNORMAL или SW_NORMAL (одно и то же) — показываем объект.
SW_SHOWMINIMIZED — показываем и «минимизируем», сворачиваем. Сейчас попробовал на TEdit — клёвый эффект. Обычно для окон используется.
SW_SHOWMAXIMIZED или SW_MAXIMIZE — аналогично предыдущему, только разворачиваем. На TEdit тоже очень клёво.
SW_SHOWNOACTIVATE — отображаем, но не делаем активным.
SW_SHOW — показываем объект. Противоположность SW_HIDE.
SW_MINIMIZE — разницы с SW_SHOWMINIMIZED не вижу, разве что значения отличаются.
SW_SHOWMINNOACTIVE — ну это уже понты. Отображает, сворачивает, да еще оно не становится активным.
SW_SHOWNA — не вижу отличий от SW_SHOWNOACTIVATE.
SW_RESTORE — показывает и, если свернуто или развернуто, восстанавливает обычное состояние.
SW_SHOWDEFAULT или SW_MAX — восстанавливает «обычное» состояние окна. Чем отличается от SW_SHOWNORMAL боюсь сказать, но бьюсь об заклад, отличия есть.
Функция ShowWindow возвращает True в случае, если объект был видимый до совершения действия. Иначе False.
Также существуют устаревшие константы HIDE_WINDOW, SHOW_OPENWINDOW, SHOW_ICONWINDOW, SHOW_FULLSCREEN, SHOW_OPENNOACTIVATE. Их значения совпадают с константами, описанными выше, нового функционала никакого нет. Просто не удивляйся, если встретишь их где-нибудь.

[ShowWindowAsync]

Синтаксис: function ShowWindowAsync(hWnd: HWND; nCmdShow: Integer): BOOL;
Аналогично ShowWindow. Различие в том, что функция ShowWindowAsync не ждет завершения показа/сокрытия, в отличие от ShowWindow. Аналогично асинхронные сокеты отличаются от синхронных. Полезно, когда надо учитывать возможность работы с зависшей программой, чтобы не ждать пока она отвиснет и функция не сделает своё дело, и когда сразу после завершения действия ничего делать не требуется.

[AnimateWindow, FlashWindow]

Различные визуальные эффекты, может быть как-нибудь про это напишу.

На сегодня хватит, на этом api функции для работы с объектами далеко не заканчиваются. Еще будет о чем писать.

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