Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Границы для перемещения формы в рабочей области

Delphi , Программа и Интерфейс , Размеры и Положение

Границы для перемещения формы в рабочей области

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

// For some reason messages.pas declares no message record for this message 

type
   TWmMoving = record
     Msg: Cardinal;
     fwSide: Cardinal;
     lpRect: PRect;
     Result: Integer;
   end;

 // Add a handler to your forms private section: 

procedure WMMoving(var msg: TWMMoving); message WM_MOVING;

 // Implement it as 

  procedure TFormX.WMMoving(var msg: TWMMoving);
   var
     r: TRect;
   begin
     r := Screen.WorkareaRect;
    // compare the new form bounds in msg.lpRect^ with r and modify it if 
   // necessary 
    if msg.lprect^.left < r.left then
       OffsetRect(msg.lprect^, r.left - msg.lprect^.left, 0);
     if msg.lprect^.top < r.top then
       OffsetRect(msg.lprect^, 0, r.top - msg.lprect^.top);
     if msg.lprect^.right > r.right then
       OffsetRect(msg.lprect^, r.right - msg.lprect^.right, 0);
     if msg.lprect^.bottom > r.bottom then
       OffsetRect(msg.lprect^, 0, r.bottom - msg.lprect^.bottom);
     inherited;
   end;

Код - обработчик для сообщения WM_MOVING в приложении Windows, написанном на языке Delphi. Сообщение WM_MOVING отправляется системой, чтобы информировать приложение о том, что его окно перемещается. Цель этого обработчика - обеспечить, чтобы границы формы не выходили за физические границы экрана.

Вот подробное описание того, что код делает:

  1. Он объявляет тип записи TWmMoving, содержащий четыре поля:
    • Msg: целочисленное значение, представляющее ID сообщения.
    • fwSide: целочисленное значение, указывающее сторону окна, которая перемещается (левая, верхняя, правая или нижняя).
    • lpRect: указатель на запись TRect, содержащую новые границы формы.
    • Result: целочисленное значение, которое будет возвращено обработчиком.
  2. Он добавляет процедуру WMMoving к частному разделу класса формы (TFormX). Эта процедура объявлена как обрабатывающая сообщение WM_MOVING.
  3. Реализация WMMoving проверяет, не выходят ли новые границы формы, хранящиеся в msg.lpRect^, за физические границы экрана, которые хранятся в свойстве WorkareaRect объекта Screen.
  4. Если новые границы выходят за экран, она корректирует их, чтобы они.fit within экранные границы с помощью функции OffsetRect.

Корректировки выполняются сравнением новых границ с экранными границами и смещением новых границ соответственно:

  • Если левая граница меньше левой границы экрана, она устанавливает новую левую границу в левую границу экрана.
  • Если верхняя граница меньше верхней границы экрана, она устанавливает новую верхнюю границу в верхнюю границу экрана.
  • Если правая граница больше правой границы экрана, она устанавливает новую правую границу в правую границу экрана.
  • Если нижняя граница больше нижней границы экрана, она устанавливает новую нижнюю границу в нижнюю границу экрана.
  • Наконец, заявление inherited вызывает стандартную реализацию обработчика, которая возвращает результат обработчика.

В целом, этот код обеспечивает, чтобы границы формы не выходили за физические границы экрана при перемещении формы.

В статье рассматривается методика ограничения перемещения формы в рабочей области Windows, используя обработчик события WM_MOVING и сравнение новых границ формы с границами области.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Размеры и Положение ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:52:41/0.0055060386657715/1