Існує функція 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
Скасувати прилипання до якого-небудь краю екрану просто, потрібно лише видалити частину коду, який відповідає за свою ділянку.
SystemParametesInfo викликається з SPI_GETWORKAREA в якості першого параметра і отримує розмір робочої області екрана (Робочий стіл). Ми будемо використовувати його для визначення корисної площі за винятком панелі задач, панелей інструментів і т.д.
Код програми:
Тепер запустіть проект і переміщайте вікно до кордонів екрану, щоб подивитися ефект прилипання.