Как написать приложение, адекватно отображающееся на экранах с различным разрешением монитора
Существует ровно один интуитивно понятный интерфейс - соска.
Остальные осваиваются путем обучения.
unit Main;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private{ Private declarations }// Отлавливаем, сообщение о изменении разрешения экранаprocedure WMDisplayChange(varmessage: TMessage); message WM_DISPLAYCHANGE;
public{ Public declarations }
W, H: integer;
end;
var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
Width := Round(Width * 1.5);
Height := Round(Height * 1.5);
ScaleBy(150, 100)
end;
procedure TForm1.WMDisplayChange(varmessage: TMessage);
begininherited;
Width := Round(Width * LOWORD(message.LParam) / W);
Height := Round(Height * HIWORD(message.LParam) / H);
ScaleBy(LOWORD(message.LParam), W);
W := Screen.Width;
H := Screen.Height;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
W := Screen.Width;
H := Screen.Height;
end;
end.
Перевод контента на русский язык:
Вот анализ кода Delphi, который может быть хорошим стартом для создания приложения, адаптирующегося к различным разрешениям экрана. Вот некоторые предложения по улучшению кода:
Создание формы
В процедуре FormCreate вы устанавливаете начальные значения W и H в соответствии с текущим шириной и высотой экрана, используя Screen.Width и Screen.Height. Это хорошая практика.
Клик по кнопке
В процедуре Button1Click вы увеличиваете ширину и высоту формы на 50% умножением их на 1,5 и округлением результатов. Вы также используете ScaleBy, чтобы масштабировать все дочерние контролы. Хотя это работает, может не быть лучшим подходом, так как может вызвать проблемы с расположением.
Обработка сообщения WM_ DISPLAYCHANGE
Процедура WMDisplayChange отвечает за обработку сообщения WM_ DISPLAYCHANGE, которое отправляется при изменении разрешения экрана. Вы обновляете ширину и высоту формы в соответствии с новым разрешением экрана, используя значения из параметра LParam сообщения. Вы также обновляете переменные W и H, чтобы отражать новый размер экрана.
Предложения
1. Используйте более robust layout management: вместо зависимости только от масштабированияconsider using a grid or panel-based layout that can adapt to different screen resolutions.
2. Обновляйте позиции и размеры дочерних контролов: помимо обновления ширины и высоты формы, обновляйте позиции и размеры дочерних контролов (например, кнопок, меток) для обеспечения их правильного расположения и размера.
3. Рассмотрите более современный подход: Delphi 2007 - это старая версия языка. Если возможно, рассмотрите возможность обновления до newer version или использования альтернативных библиотек, которые обеспечивают лучшую поддержку современных разрешений экрана.
Вот обновленная версия процедуры WMDisplayChange, которая включает некоторые из этих предложений:
procedureTForm1.WMDisplayChange(varmessage:TMessage);begininherited;Width:=Round(Width*LOWORD(message.LParam)/W);Height:=Round(Height*HIWORD(message.LParam)/H);// Обновляйте позиции и размеры дочерних контроловButton1.Left:=Round(Button1.Left*LOWORD(message.LParam)/W);Button1.Top:=Round(Button1.Top*HIWORD(message.LParam)/H);Button1.Width:=Round(Button1.Width*LOWORD(message.LParam)/W);Button1.Height:=Round(Button1.Height*HIWORD(message.LParam)/H);// Обновляйте любые другие дочерние контролы, которые нужно обновитьend;
Не забудьте обновлять позиции и размеры всех дочерних контролов в этой процедуре.
В статье описывается способ создания приложения на языке Delphi, адаптирующегося к различным разрешениям монитора с помощью отловки сообщений о изменении разрешения экрана и перерасчета размеров формы в соответствии с новым разрешением.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.