
Сегодня вкратце рассмотрим, что мы можем сделать, зная 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