Масштабирование окна
Страница 2. Дополнение


 

Дополнение

Файл DELSEQ07.FAQ содержит код примера отображения форм в различных разрешениях. К сожалению, он не учитывал ширину границы окна. Я публикую изменение, масштабирующее компоненты вне зависимости от разрешения экрана и ширины границ окон. Включите нижеследующий модуль в секцию uses каждого модуля и вызывайте ScaleForm в обработчике формы OnCreate, передавая в качестве параметра имя формы. Я надеюсь что помог тем, кто столкнулся с данной проблемой.

unit scale;

interface

uses

Forms, WinTypes, WinProcs, SysUtils;

procedure ScaleForm(Sender: TObject);


implementation

procedure
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 do
begin
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;

begin
end
.

 
« Предыдущая статья   Следующая статья »