经过了一个上午折腾,终于搞定了,其实代码很简单!
与大家分享: const  ScreenWidth: LongInt = 1024; {I designed my form in 800x600 mode.}  ScreenHeight: LongInt = 768;
var
  Form1: TForm1;implementation{$R *.dfm}
Function TForm1.BigToSmall():double;
begin
   BigToSmall:=Screen.Width/ScreenWidth  ;
end;
Function TForm1.SmallToBig():double;
begin
   SmallToBig:=Screen.Width/ScreenWidth;
end;
Function TForm1.initWindowsPosition():boolean;
var
 SizeDiv:double;
 i:integer;
begin
   if Screen.Width<=  ScreenWidth then
      begin
         SizeDiv:=  BigToSmall
      end
   else
      begin
         SizeDiv:=  SmallToBig 
      end;   //============================================
  for i:=ComponentCount-1 downto 0 do
  begin
    if(Components[i] is TSpeedButton) then
     begin
       TSpeedButton(Components[i]).Top:=Round(SizeDiv*(TSpeedButton(Components[i]).Top));
       TSpeedButton(Components[i]).left:=Round(SizeDiv*(TSpeedButton(Components[i]).left));
       TSpeedButton(Components[i]).Width:=Round(SizeDiv*(TSpeedButton(Components[i]).Width));
       TSpeedButton(Components[i]).Height:=Round(SizeDiv*(TSpeedButton(Components[i]).Height));
     end;
    If (Components[i] is TPanel) then
     begin
       TPanel(Components[i]).Top:=Round(SizeDiv*(TPanel(Components[i]).Top));
       TPanel(Components[i]).left:=Round(SizeDiv*(TPanel(Components[i]).left));
       TPanel(Components[i]).Width:=Round(SizeDiv*(TPanel(Components[i]).Width));
       TPanel(Components[i]).Height:=Round(SizeDiv*(TPanel(Components[i]).Height));
     end;
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;begin
    Form1.Width:=990;
    Form1.Height:=724;
    initWindowsPosition;
end;

解决方案 »

  1.   

    DELPHI的窗体不是自动适应分辨率变化的吗?
      

  2.   

    DELPHI的窗体自动适应?
    问题是窗体上的控件能不能随着自动适应才是重要的吧?
      

  3.   

    也可以啊,DELPHI上的控件都有ALIGN属性,可以设为ALTOP,ALBOTTOM等,这样应该可以满足要求啊。
      

  4.   

    同意黑鹰说的,你这个样子窗体控件都变大了,字体大小怎么解决?还是用altop,alclient等方式解决比较好。
      

  5.   

    to  whbo(王红波(年轻人,要有所作为)) 
    什么方法
      

  6.   

    字体是自动适应的,你同样的字体,分辨率低时大,分辨率高时小。
    for i:=ComponentCount-1 downto 0 do
    begin
    if(Components[i] is TSpeedButton) then
    begin
    If (Components[i] is TPanel) then
    begin
    TPanel(Components[i]).Top:=Round(SizeDiv*(TPanel(Components[i]).Top));
    TPanel(Components[i]).left:=Round(SizeDiv*(TPanel(Components[i]).left));
    TPanel(Components[i]).Width:=Round(SizeDiv*(TPanel(Components[i]).Width));
    TPanel(Components[i]).Height:=Round(SizeDiv*(TPanel(Components[i]).Height));
    end;
    end;
    可以改成
    for i:=ControlCount-1 downto 0 do
    with Controls[i] do
    begin
      Top:=Round(SizeDiv*Top);
      left:=Round(SizeDiv*left);
      Width:=Round(SizeDiv*Width);
      Height:=Round(SizeDiv*Height);
    end;
      

  7.   

    使用控件的Anchors属性,全部搞定,还是要多读书啊
      

  8.   

    Alclient+Anchors最好了,自动缩放无用。
      

  9.   

    有没有用过form的scaled属性?把它设为true, 你所需要的一切就都有了