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

Перемещение окна вне заголовка 2

Delphi , Программа и Интерфейс , Заголовок формы

Перемещение окна вне заголовка 2

Нужно объявить процедуру в частных объявлениям (после ключевого слова Private):


private
  { Private declarations }
  procedure WMNCHitTest (var M: TWMNCHitTest); message wm_NCHitTest;

В области implementation описываем процедуру так:


implementation
{$R *.DFM}

procedure TForm1.WMNCHitTest (var M:TWMNCHitTest);
begin
  inherited;
  if M.Result = htClient then 
    M.Result := htCaption;
end;

Мы выдаём клиентскую область окна за заголовочную область.

Here's the translation of the text into Russian:

Код написан на языке программирования Delphi, разработанном компанией Embarcadero Technologies.

Этот код определяет процедуру WMNCHitTest, которая обрабатывает сообщение wm_NCHitTest в приложении Windows. Сообщение wm_NCHitTest отправляется, когда пользователь кликнул на не-клиентскую область окна (то есть, вне области клиента).

Процедура объявлена как приватная, что означает, что она доступна только изнутри того же модуля.

В разделе реализации процедура определена. Она сначала вызывает унаследованную процедуру, чтобы позволить базовой классу обрабатывать сообщение, если это необходимо. Затем она проверяет, является ли результат теста на попадание в htClient (что указывает на то, что пользователь кликнул на область клиента). Если так, она устанавливает результат в htCaption, что означает, что пользователь кликнул на панель заголовка.

Таким образом, код эффективно перемещает окно за пределы его панели заголовка, когда пользователь кликнет на не-клиентскую область. Это полезно для приложений, где вам нужно предотвратить пользователя от изменения размера или перемещения окна, кликая по его рамке.

Вот альтернативное решение, использующее более современный подход:

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
  if (M.X >= Caption.Left) and (M.X <= Caption.Right) then
    M.Result := HTCAPTION
  else
    inherited;
end;

В этом коде мы проверяем, попадает ли координата x клика в пределы панели заголовка. Если так, мы устанавливаем результат в HTCAPTION, что означает, что пользователь кликнул на панель заголовка. В противном случае мы вызываем унаследованную процедуру, чтобы позволить базовой классу обрабатывать сообщение.

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

Процедура WMNCHitTest в Delphi позволяет переместить окно вне заголовка, объявив ее в частных объявлениях и описав в области implementation.


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

Получайте свежие новости и обновления по 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 13:19:06/0.0053739547729492/1