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

Центрирование формы в Delphi: решение проблемы для экранов 4K и масштабирования Windows

Delphi , ОС и Железо , Windows

При разработке приложений на Delphi может возникнуть необходимость центрировать форму на экране пользователя. Особенно это актуально при работе с высоким разрешением экранов, например, 4K, где включено масштабирование Windows. В таких случаях стандартные методы центрирования могут не работать корректно.

Описание проблемы

Разработчик столкнулся с проблемой, что форма, предназначенная для отображения в качестве всплывающего экрана (без границ), не центрируется на экране при использовании разрешения 4K с включенным масштабированием в Windows. Вместо этого, форма появляется в верхнем левом углу экрана. Это указывает на возможную проблему, связанную с высоким разрешением экрана (HiDPI), в среде разработки Delphi.

Контекст и решение

В контексте обсуждения была предложена возможность использования свойства poDesigned и ручного задания значений Top и Left в событии OnShow. Также упоминается функция muldiv, которая может быть полезна для центрирования формы.

Подтвержденный ответ указывает на решение проблемы: необходимо использовать следующий код для центрирования формы:

Form1.Left := (Form1.Monitor.Width  - Form1.Width)  div 2;
Form1.Top  := (Form1.Monitor.Height - Form1.Height) div 2;

Этот код гарантирует, что форма будет расположена в центре экрана, на котором она отображается, учитывая текущие настройки масштабирования.

Альтернативный ответ предлагает использовать свойства экрана:

Form1.Left := (Screen.WorkAreaRect.Width  - Form1.Width)  div 2;
Form1.Top  := (Screen.WorkAreaRect.Height - Form1.Height) div 2;

Этот метод также центрирует форму, но уже относительно рабочей области экрана.

Универсальное решение

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

  1. Установить свойство Position формы в poDesigned.
  2. В событии OnShow формы вычислить и установить значения свойств Left и Top с учетом текущих размеров экрана и размеров формы. Можно использовать функцию muldiv для корректного расчета значений при масштабировании.

Пример кода на Object Pascal:

procedure TForm1.FormShow(Sender: TObject);
var
  MonitorWidth, MonitorHeight: Integer;
begin
  MonitorWidth := Form1.Monitor.Width;
  MonitorHeight := Form1.Monitor.Height;

  // Корректный расчет позиции для центрирования формы
  Form1.Left := muldiv(MonitorWidth - Form1.Width, -2, 1);
  Form1.Top := muldiv(MonitorHeight - Form1.Height, -2, 1);
end;

Функция muldiv используется для выполнения деления с округлением, что важно для корректного центрирования формы при различных масштабах экрана.

Заключение

При разработке приложений на Delphi для экранов высокого разрешения и с включенным масштабированием Windows, важно использовать правильные методы центрирования формы. Предложенные выше решения позволят разработчикам обеспечить корректное отображение формы на экране пользователя независимо от его разрешения и настроек масштабирования.

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

Разработчик в Delphi столкнулся с проблемой центрирования формы на экране 4K с включенным масштабированием Windows и нашел решение, используя различные методы установки положения формы.


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

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




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


:: Главная :: Windows ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-08-27 02:46:33/0.0033209323883057/0