在1280*800的分辨率下设计的程序,看起来效果不错;
可是在1024*768的环境中运行时,看起来就特别难看了。
请问,怎么使程序能适应不同的分辨率?

解决方案 »

  1.   

    根据screen里面的值来计算吧。
      

  2.   

    procedure screenRate(form:Tform); //适应不同分辨率
    begin
      form.scaled:=true; //screenHeight,screenWidth开发环境的分辨率 定义成常量
      if(screen.Width<>screenWidth) then
      begin
        form.height:=longInt(form.height)*longint(screen.height) div screenHeight;
        form.width:=longInt(form.width)*longInt(screen.width) div screenWidth;
        form.scaleby(screen.width,screenWidth);
      end;
    end;
      

  3.   

    我觉得用anchors做好了比用scaleby要好
      

  4.   

    var 
       V_CXScreen,V_CYScreen,V_Frequency:integer; //当前分辨率
      V_EXScreen,V_EYScreen : Integer; //修改后的分辨率procedure TFmLmMain.DealSystemMetrics;
    var
      i: Integer;
    begin
      V_CXScreen := GetSystemMetrics(SM_CXSCREEN); //系统当前分辨率
      V_CYScreen := GetSystemMetrics(SM_CYSCREEN);
      V_Frequency := GetDeviceCaps(GetDC(application.Handle),VREFRESH);
      if V_CXScreen >= 1024 then
      begin
        V_EXScreen := 1024;
        V_EYScreen := 768;
      end else
      begin
        V_EXScreen := 800;
        V_EYScreen := 600;
      end;  if (V_EXScreen <> V_CXScreen) or (V_EYScreen <> V_CYScreen) then
        SetScreenParams(V_EXScreen, V_EYScreen,V_Frequency); end;function SetScreenParams(PnCX,PnCY:word;PnFrequency :Integer):boolean;
    var
      DevMode:TDeviceMode;
    begin
        Result:=EnumDisplaySettings(nil,0,DevMode);
        if Result then
        begin
          DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
          DevMode.dmPelsWidth:=PnCX;
          DevMode.dmPelsHeight:=PnCY;
          DevMode.dmDisplayFrequency:=PnFrequency; //刷新频率      Result:=(ChangeDisplaySettings(DevMode,CDS_UPDATEREGISTRY)=DISP_CHANGE_SUCCESSFUL)
        end;
    end;
      

  5.   

    建议楼主使用 Easysize组件。
    1、Easysize组件功能:根据屏幕分辨率自动调整窗体大小、窗体中各控件的比例,字体大小等。
    2、Easysize组件使用方法:使用方法很简单,步骤如下:
      A、将该组件拖到窗体上默认为FormResizer1;
      B、FormCreate事件中加入:FormResizer1.InitializeForm;
      C、FormResize事件中加入:FormResizer1.ResizeAll;就这样就ok了,把复杂的算法交给组件,是不是很简单。展示一下DEMO的效果图吧,见下图:图1、
    图2、你看一下适合不适合你用,如果有问题继续讨论!!
      

  6.   

    补充一下:如果需要EasySize组件,可以加入QQ高级群:9642802 找“大海”要就可以了。
      

  7.   

    我都是自己计算的,类似5楼的写法在窗体show的时候写,按照一定的比例缩放,还有位置初始化