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

Удаление бордюра в MDI-формах Delphi: пошаговое руководство

Delphi , Программа и Интерфейс , MDI приложения

Иногда при разработке приложений на Delphi, используя многооконный интерфейс (MDI), разработчики сталкиваются с проблемой появления бордюра внутри основной формы. Этот бордюр может выглядеть неэстетично и его часто хотят убрать. Рассмотрим, как это можно сделать.

Проблема бордюра в MDI-формах

Когда основная форма становится MDI-формой, она может отображаться с бордюром (bevel) внутри. Это происходит из-за использования стиля окна WS_EX_CLIENTEDGE, который добавляет бордюр с вогнутым краем. Убрать этот бордюр не так просто, поскольку процедура окна MDI-клиента (реализована во VCL) принудительно отображает клиентский край.

Шаг 1: Попытка удаления стиля WS_EX_CLIENTEDGE

Первым шагом может быть попытка удаления стиля WS_EX_CLIENTEDGE в процедуре создания окна. Однако это не приведет к визуальным изменениям, так как процедура окна MDI-клиента перезапишет стиль.

procedure TMyMDIForm.CreateWnd;
var
  ExStyle: DWORD;
begin
  inherited;
  ExStyle := GetWindowLongPtr(ClientHandle, GWL_EXSTYLE);
  SetWindowLongPtr(ClientHandle, GWL_EXSTYLE, ExStyle and not WS_EX_CLIENTEDGE);
  SetWindowPos(ClientHandle, 0, 0,0,0,0, SWP_FRAMECHANGED or
    SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER);
end;

Шаг 2: Переопределение обработчика сообщений окна

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

type
  TMyMDIForm = class(TForm)
  protected
    procedure ClientWndProc(var Message: TMessage); override;
  end;

procedure TMyMDIForm.ClientWndProc(var Message: TMessage);
var
  ExStyle: DWORD;
begin
  case Message.Msg of
  $3F:
    begin
      ExStyle := GetWindowLongPtr(ClientHandle, GWL_EXSTYLE);
      SetWindowLongPtr(ClientHandle, GWL_EXSTYLE, ExStyle and not WS_EX_CLIENTEDGE);
      SetWindowPos(ClientHandle, 0, 0,0,0,0, SWP_FRAMECHANGED or
        SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER);
    end;
  else
    inherited;
  end;
end;

Шаг 3: Использование альтернативных решений

Если предыдущие шаги не работают, например, в Delphi 10.1 Berlin, можно использовать сторонние компоненты, такие как NLDExtraMDIProps, который имеет свойство ShowClientEdge для удаления бордюра.

Заключение

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

Создано по материалам из источника по ссылке.

Руководство по устранению бордюра в многооконном интерфейсе (MDI) в среде разработки Delphi.


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

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




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


:: Главная :: MDI приложения ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-03-15 08:09:27/0.0061359405517578/0