Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.

Читать онлайн книгу Delphi. Трюки и эффекты - Александр Чиртик страница 11

Название: Delphi. Трюки и эффекты

Автор: Александр Чиртик

Издательство:

Жанр: Программы

Серия:

isbn: 978-5-911-80219-6

isbn:

СКАЧАТЬ сворачивания, контекстной справки (обычно расположены в строке заголовка окна);

      • полосы прокрутки – горизонтальная и вертикальная;

      • системное меню (раскрывается при щелчке кнопкой мыши на значке окна);

      • меню – полоса меню, обычно вверху окна;

      • клиентская область – по умолчанию все пространство окна, кроме строки заголовка, меню и полос прокрутки.

      Каждый раз, когда над окном перемещается указатель мыши либо происходит нажатие кнопки мыши, система посылает соответствующему окну сообщение WM_NCHITTEST для определения того, над какой из перечисленных выше областей окна находится указатель. Обработчик этого сообщения, вызываемый по умолчанию, информирует систему о расположении элементов окна в привычных для нас местах: заголовка – сверху, правой границы – справа и т. д.

      Как вы, скорее всего, уже догадались, реализовав свой обработчик сообщения WM_NCHITTEST, можно изменить назначение элементов окна. Этот прием как раз и используется в листинге 1.21.

Листинг 1.21. Перемещение окна за клиентскую область

      procedure TfrmMoveClient.WMNCHitTest(var Message: TWMNCHitTest);

      var

      rc: TRect;

      p: TPoint;

      begin

      //Если точка приходится на клиентскую область, то заставим

      //систему считать эту область частью строки заголовка

      rc := GetClientRect();

      p.X := Message.XPos;

      p.Y := Message.YPos;

      p := ScreenToClient(p);

      if PtInRect(rc, p) then

      Message.Result := HTCAPTION

      else

      //Обработка по умолчанию

      Message.Result := DefWindowProc(Handle, Message.Msg, 0,

      65536 * Message.YPos + Message.XPos);

      end;

      Приведенный в листинге 1.21 обработчик переопределяет положение только строки заголовка, возвращая значение HTCAPTION. Этот обработчик может возвращать следующие значения (целочисленные константы, возвращаемые функцией DefWindowProc):

      • HTBORDER – указатель мыши находится над границей окна (размер окна не изменяется);

      • НТВОТТОМ, НТТОР, HTLEFT, HTRIGHT – над нижней, верхней, левой или правой границей окна соответственно (размер окна можно изменить, «потянув» за границу);

      • HTBOTTOMLEFT, HTBOTTOMRIGHT, HTTOPLEFT, HTTOPRIGHT – В левом нижнем, правом нижнем, левом верхнем или правом верхнем углу окна (размер окна можно изменять по диагонали);

      • HTSIZE, HTGROWBOX – над областью, предназначенной для изменения размера окна по диагонали (обычно в правом нижнем углу окна);

      • HTCAPTION – над строкой заголовка окна (за это место окно перемещается);

      • HTCLIENT – над клиентской областью окна;

      • HTCLOSE – над кнопкой закрытия окна;

      • HTHELP – над кнопкой вызова контекстной справки;

      • HTREDUCE, HTMINBUTTON – над кнопкой минимизации окна;

      • HTZOOM, HTMAXBUTTON – над кнопкой максимизации окна;

      • HTMENU – над полоской меню окна;

      • HTSYSMENU – над значком окна (используется для вызова системного меню);

      • HTHSCROLL, HTVSCROLL – указатель находится над вертикальной или горизонтальной полосой СКАЧАТЬ