Изменение размера и центрирование формы
Форма должна быть установлена, чтобы автоматически изменять размер и 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;
Комментарии