Изменение размера и центрирование формы
Форма должна быть установлена, чтобы автоматически изменять размер и AutoScroll:= False, по крайней мере во время новых вычислений. Также размер шрифта для формы должен быть вероятно 12 для шрифта, который будет изменен вниз, для 800х600, у всех управлений свойство ParentFont:= True, так ка они изменят размеры.
В то время, как это точно работает для старых разрешающих способностей экрана, которые были более-менее пропорциональны, а как изменить размеры для более продвинутых мониторов, например, для 1280х960 или 1280х1024? Расчитываем соотношение соотношение ScrX / ScreenX = 1.
uses
math,windows;
const
screenx = 1280;
screeny = 768;
procedure TForm1.AutoSizeAll ;
var
ScrX, ScrY, k: integer ;
Ratio: double;
begin
ScrX:= GetSystemMetrics(
SM_CXSCREEN); // находим разрешающую способность значения x
ScrY:= (GetSystemMetrics(
SM_CYSCREEN)); // находим разрешающую способность значения y
Ratio:= min(ScrX/ScreenX, ScrY/ScreenY);
{ берем меньшее значение, чтобы окно не было слишком большим }
ScaleBy(trunc(Ratio * 100), 100);
{ изменить размеры всех управлений и постараться поместить
их в правильную позицию }
{ Центрируем форму на экране }
Form1.Left:= CentreLeft(Form1.Width);
Form1.Top:= CentreTop(Form1.Height) ;
end;
Этот код обращается к двум функциям CentreLeft и CentreTop. Они определены следующим образом:
function CentreLeft(fw: integer): integer;
{ Вычисляем Form.Left }
var
smcx: integer;
begin
smcx:= GetSystemMetrics(SM_CXSCREEN);
CentreLeft:=(smcx - fw) div 2;
end;
function CentreTop(fh: integer): integer;
{ Вычисляем Form.Top}
var
smcy: integer;
begin
smcy:= GetSystemMetrics(SM_CYSCREEN);
CentreTop:= (smcy - fh) div 2;
end;
Комментарии