Внешний вид сайта:

Изменение размера и центрирование формы

Вызов этой процедуры из события формы OnActivate изменит размеры формы пропорционально разрешающей способности экрана, если разрешающая способность 1280x768, нужно вычислить ширину и высоту формы.

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

Комментарии

Нет комментариев. Ваш будет первым!