我在17下做了一个应用程序,但换到15,14上的时候,界面显示会很大。应该怎么处理。

解决方案 »

  1.   

    是程序启动时首先检测系统分辨率,如果不符合要求,就更改为符合要求的。比如你的分辨率是1024X768,用户是800X600。那就在程序启动的时候把系统分辨率更改。在程序退出的时候再把分辨率修改回原来状态。我觉得这样可能是最好,最完美,最省事的方法了。
    我的方法根据高手的指点定义两个全局变量。SCREENX,SCREENY:INTEGER;
    procedure Tmainwinform.FormCreate(Sender: TObject);
    var
      sx, sy: Integer;
      DevMode: TDeviceMode;
    begin
      sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽
      sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高
      //用于在程序结束时把分辨率 改回原始状态
      screenx := sx; //分辨率宽
      screeny := sy; //分辨率高
      if (sx <> 1024) and (sy <> 768) then
      begin
        DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
        DevMode.dmPelsWidth := 1024;
        DevMode.dmPelsHeight := 768;
        ChangeDisplaySettings(DevMode,0); //设置新的显示参数
      end;
    程序关闭时把分辨率修改为原来状态:
    procedure Tmainwinform.FormClose(Sender: TObject;
      var Action: TCloseAction);
    var
      sx, sy: Integer;
      DevMode: TDeviceMode;
    begin
             sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽
             sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高
            if (sx <> screenx) and (sy <> screeny) then
            begin
               DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
               DevMode.dmPelsWidth := screenx;
               DevMode.dmPelsHeight := screeny;
               ChangeDisplaySettings(DevMode,0); //设置新的显示参数
            end;
        actiON:=cafree;
    end;其中两个全局参数很重要。
    希望能有更好的方法。
      

  2.   

    或者
    -----------------------
    假设你在800*600的分辨率下设计的form,第一步:
    inplementation
    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;下一步,要让每个子控制的字体改变到合适的大小:
    type
      TFooClass = class(TControl); { needed to get at protected }
                                   { font property }var
      i: integer;
    begin
      for i := ControlCount - 1 downto 0 do
        TFooClass(Controls[i]).Font.Size :=
            (NewFormWidth div OldFormWidth) *
            TFooClass(Controls[i]).Font.Size;
    end;
      

  3.   

    但是,如果用戶的機器差,你強行轉換分辨率,可能會導致黑屏,後者嚴重的,燒顯示卡哦,不知道
    Kshape([伟大的大伟!]) ( ) 有沒有擔心這點?
    可能是我多慮了。