implementationconst
ScreenWidth: Integer = 800; {Я разрабатывал свою форму в режиме 800x600.}
ScreenHeight: Integer = 600;
{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
var
x, y: LongInt; {Тип Integer не достаточно большой для наших значений.}begin
form1.scaled := true;
x := getSystemMetrics(SM_CXSCREEN);
y := getSystemMetrics(SM_CYSCREEN);
if (x <> ScreenHeight) or (y <> ScreenWidth) thenbegin
form1.height := form1.height * x div ScreenWidth;
form1.width := form1.width * y div ScreenHeight;
end;
if x <> ScreenWidth then
scaleBy(x, ScreenWidth);
end;
Дополнение
Файл DELSEQ07.FAQ содержит код примера отображения форм в различных
разрешениях. К сожалению, он не учитывал ширину границы окна. Я публикую
изменение, масштабирующее компоненты вне зависимости от разрешения экрана и
ширины границ окон. Включите нижеследующий модуль в секцию uses каждого модуля и
вызывайте ScaleForm в обработчике формы OnCreate, передавая в качестве параметра
имя формы. Я надеюсь что помог тем, кто столкнулся с данной проблемой.
unit scale;
interfaceuses
Forms, WinTypes, WinProcs, SysUtils;
procedure ScaleForm(Sender: TObject);
implementationprocedure ScaleForm(Sender: TObject);
const{измените это так, чтобы это соответствовало
режиму разрешения во время разработки}
DesignScrY: LongInt = 480;
DesignScrX: LongInt = 640;
DesignBorder: LongInt = 4; {значение в Панели Управления + 1}var
SystemScrY: LongInt;
SystemScrX: LongInt;
SystemBorder: LongInt;
OldHeight: LongInt;
OldWidth: LongInt;
begin
SystemScrY := GetSystemMetrics(SM_CYSCREEN);
SystemScrX := GetSystemMetrics(SM_CXSCREEN);
SystemBorder := GetSystemMetrics(SM_CYFRAME);
with Sender as TForm dobegin
Scaled := True;
AutoScroll := False;
Top := Top * SystemScrX div DesignScrX;
Left := Left * SystemScrX div DesignScrX;
OldHeight := Height + (DesignBorder - SystemBorder) * 2;
OldWidth := Width + (DesignBorder - SystemBorder) * 2;
ScaleBy((OldWidth * SystemScrX div DesignScrX - SystemBorder * 2),
(OldWidth - DesignBorder * 2));
{
Для форм не имеющих границ измените предшествующие
три строки следующим способом:
OldHeight := Height;
OldWidth := Width;
ScaleBy(SystemScrX, DesignScrX);
}
Height := OldHeight * SystemScrY div DesignScrY;
Width := OldWidth * SystemScrX div DesignScrX;
end;
end;
beginend.
Код, который я предоставил, - это программный код на языке Delphi, который масштабирует форму для соответствия разрешению экрана, учитывая ширину рамки окна. Процедура ScaleForm вызывается в обработчике события OnCreate формы.
Вот подробное описание кода:
В процедуре TForm1.FormCreate свойство Scaled устанавливается в True, что позволяет масштабировать форму.
Разрешение экрана получается с помощью функции GetSystemMetrics, а ширина и высота формы масштабируются соответствующим образом.
Если разрешение экрана изменилось с момента создания формы (т.е., переменные x или y не равны значениям, определенным в дизайнере), размер формы корректируется для соответствия новому разрешению экрана.
В процедуре ScaleForm, которая вызывается в обработчике события OnCreate формы:
Определены значения ширины и высоты формы в дизайнере (DesignScrX, DesignScrY).
Разрешение экрана получается с помощью функции GetSystemMetrics.
Ширина рамки окна получается с помощью функции GetSystemMetrics с константой SM_CYFRAME.
Размер формы корректируется для соответствия новому разрешению экрана, учитывая ширину рамки.
Код также предлагает альтернативное решение для форм без рамок:
Это решение просто масштабирует ширину и высоту формы без коррекции для ширины рамки.
В целом, этот код - хороший пример, как масштабировать форму Delphi для соответствия различным разрешениям экрана, учитывая ширину рамки.
Публикуется изменение кода, масштабирующее окно формы вне зависимости от разрешения экрана и ширины границ окон.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.