Как сделать, чтобы форма прилипала к краям экрана |
![]() |
Статьи |
Существует функция API Windows, которая позволяет привязывать окна к краю экрана. Здесь применяются сообщения Windows. Delphi делает обработку сообщений легким, благодаря использованию событий, которые обычно генерируются в ответ на сообщения Windows после того, как она передает его в приложение. ![]() Хотя многие сообщения Windows обрабатываются Delphi, но некоторые необходимо доработать. Например, мы узнаем, если форма поменяет размер (при помощи события OnResize и обработке сообщения WM_SIZE). Но как мы узнаем, что форма была перемещена? Delphi может получить сообщение, но изначально ничего с ним не делает. Сообщение WM_MOVING посылается окну, когда пользователь его перемещает. Обрабатывая это сообщение, приложение может отслеживать размер и положение перемещаемого окна и при необходимости, изменить его размер или положение. Сообщение WM_WINDOWPOSCHANGING посылается окну, когда меняется его размер, положение или Z-порядок в результате вызова функции SetWindowPos или иной функции управления окном. Простого сообщения нам не достаточно, нам нужно знать и другие параметры. Например, сообщение WM_MOVE говорит нам, что изменилась позиция у формы, но оно также имеет параметр LPARAM, который может нам дать X и Y позицию. У сообщения WM_WINDOWPOSCHANGING всего один параметр, который указывает на структуру WINDOWPOS, который содержит информацию о новом размере и положении окна. Структура WINDOWPOS определяется так:
В нашем случае, сделаем, чтобы форма прилипала к краю экрана на определенном расстоянии, например, в 20 пикселах от края. Сообщение WM_WINDOWPOSCHANGINGПоместите объявление процедуры WMWINDOWPOSCHANGING в части private формы. Отменить прилипание к какому-либо краю экрана просто, нужно лишь удалить часть кода, который отвечает за свой участок. SystemParametesInfo вызывается с SPI_GETWORKAREA в качестве первого параметра и получает размер рабочей области экрана (Рабочий стол). Мы будем использовать его для определения полезной площади за исключением Панели Задач, Панелей инструментов и т.д. Код программы:
Теперь запустите проект и перемещайте окно к границам экрана, чтобы посмотреть эффект прилипания. |