转贴:[主动适应]
在800*600下做了一个FORM,但到640*480下一看却变了形,
控件的相对位置都变了,不知道如何解决,请教诸位高手。Another_eYes (1998-11-22 22:39:29)  
implementation
const
  ScreenWidth: LongInt = 800; {I designed my form in 800x600 mode.}
  ScreenHeight: LongInt = 600;{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
  scaled := true;
  if (screen.width <> ScreenWidth) then  begin
    height := longint(height) * longint(screen.height) DIV ScreenHeight;
    width := longint(width) * longint(screen.width) DIV ScreenWidth;
    scaleBy(screen.width, ScreenWidth);
  end;
end;下面是解决字体大小的代码:
USES typinfo;  {Add this to your USES statement.}var
  i: integer;
begin
  for i := componentCount - 1 downto 0 do
    with components[i] do
    begin
      if GetPropInfo(ClassInfo, 'font') <> nil  then
        font.size := (NewFormWidth DIV OldFormWidth) * font.size;
    end;
end;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~再一个办法是改屏幕分辨率为你程序设计时的分辨率:procedure SetScreenRes(XRes, YRes: DWord);
var
 lpDevMode : TDeviceMode;
begin
 EnumDisplaySettings(nil, 0, lpDevMode);
 lpDevMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT;
 lpDevMode.dmPelsWidth:=XRes;
 lpDevMode.dmPelsHeight:=YRes;
 ChangeDisplaySettings(lpDevMode, 0);
end;调用例子: 
   先用两个 integer 变量保存当前屏幕的分辨(x:=screen.width ; y:=screen.height;) 
   SetScreenRes(800,600); //改为 800 x 600 (退出时记得恢复:)