自己开发的程序是在WIN2000系统下,计算机为17纯平,1024* 768。在该机器上显示非常好,但到了其它机器(WIN98、15寸、800*600),显示界面非常难看,即使设为1024 * 768,也非常变形。怎么办?

解决方案 »

  1.   

    screen.width
    screen.height屏幕的大小Form1.Scaled := false;
      

  2.   

    可能跟Windows系统库有关, 开发时尽量用小字体. Scale设置为true
      

  3.   

    Type
      TFooClass = class(TControl); //在此加入聲明
    var
      BaseForm: TBaseForm;
    Const
      ScreenWidth=1024;  //此為設計時的分辨率的寬   現假設為:800 x 1024implementation{$R *.DFM}procedure TBaseForm.FormCreate(Sender: TObject);
    var 
        I,NewFormWidth,OldFormWidth: Integer;
    begin
      if (screen.width <> ScreenWidth) then    //變更窗體及控件大小及字體,以適應不同分辨率的要求
      begin
        OldFormWidth := Width;
        Scaled := True;
        ScaleBy(Screen.Width, ScreenWidth);
        NewFormWidth := Width;
        for i := ControlCount - 1 downto 0 do
          TFooClass(Controls[i]).Font.Size := (NewFormWidth div OldFormWidth)*TFooClass(Controls[i]).Font.Size;
      end;
    end;
      

  4.   

    可以让显示器适应你的软件,软件运行时变成你设置的,退出后回到原来状态.
    var
      main: Tmain;
      oldwidth,oldheight,oldfreq:integer;//记录原来状态
    procedure Tmain.FormCreate(Sender: TObject);
    begin
      setscreen(1024,768,85);//设置新的状态
    end;
    procedure Tmain.FormDestroy(Sender: TObject);
    begin
    setscreen(oldwidth,oldheight,oldfreq);//恢复原来的状态
    end;
    procedure Tmain.setscreen(newwidth, newheight, newfrquency:integer);
    var
      devmode:Tdevicemode;
    begin
      OldWidth:=GetSystemMetrics(SM_CXSCREEN);
      OldHeight:=GetSystemMetrics(SM_CYSCREEN);
      if (oldwidth<>newwidth) and (oldheight<>newheight) then
      begin
      DevMode.dmSize:=sizeof(TDeviceMode);
      EnumDisplaySettings(nil, DWORD(-1), DevMode);
      DevMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
      DevMode.dmPelsWidth:=NewWidth;
      DevMode.dmPelsHeight:=NewHeight;
      OldFreq:= DevMode.dmDisplayFrequency;
      DevMode.dmDisplayFrequency:=newfrquency;
      ChangeDisplaySettings(DevMode,0);
      end;
    end;
    //显示器烧了可别怪我!:)