在delphi里如何调整分辨率
800*600 ->1024*768
edit筐偏移,右边出现空白一块区域
如果在不改变大小的情况下有什么办法解决?
描点和panel都使用过,都没有办法解决

解决方案 »

  1.   

    楼主给分喽,这个程序段可是在我的商业软件中运用的喽。
    procedure TForm1.FormShow(Sender: TObject);
    var
    x,y:longint;
    //默认分辨率为800x600
    begin
    label3.Color:=$0080FFFF;
    label4.Color:=$0097DEE8;
    label5.Color:=$0097DEE8;
    label6.Color:=$0097DEE8;
    panel2.Left:=0;                  //panel2是库存面板
    panel2.Top:=403;
    panel2.Height:=115;
    panel3.Left:=0;                 //panel3是报表打印面板
    panel3.Top:=431;
    panel3.Height:=87;
    panel5.Left:=0;                // panel5是系统管理面板
    panel5.Top:=459;
    panel5.Height:=59;
    paneL4.Top:=501;
    h:=168;w:=424;
    x := GetSystemMetrics(SM_CXSCREEN);
    y := GetSystemMetrics(SM_CYSCREEN);
    Str(x,a);
    Str(y,b);
    if (a='1024') and (b='768') then   //分辨率为1024x768
      begin
         panel2.Top:=403+h;
         panel3.Top:=431+h;
         panel5.Top:=459+h;
         paneL4.Top:=501+h;
         image3.Visible:=true;
         image1.Visible:=false;
      end
    else
      begin
         panel2.Top:=403;
         panel3.Top:=431;
         panel5.Top:=459;
         paneL4.Top:=501;
         image3.Visible:=false;
         image1.Visible:=true;
      end;
    end;这是一个OUTLOOK 风格的界面,在800*600和1024*768下自适应的
      

  2.   

    changedesplayseting(800,600);函数大盖是这个样子确切我记不清了,查查把change crtl+space
      

  3.   

    不会那么复杂吧,
    if screen.Width <> 1024 then scaleby(screen.Width,1024);   
    就可以了,它会自动去调整,不过你在设置窗体的字体最好是:宋体,小四,
    这样它转变时字体不会“变态”!!
      

  4.   

    在程序运行时调整分辨率,结束退出后恢复原来的分辨率,这样也不会影响个人爱好
    procedure TmainFRM.FormCreate(Sender: TObject);
        if(Screen.width<>1024)then       //在这里进行分辨率的调整,调成1024*768的
          begin
            change:=true;
            flag:=EnumDisplaySettings(nil,0,DevMode); //取得旧的显示参数
            if flag then
              begin
               screenWidth:=getdevicecaps(GetDc(0),HORZRES);
               screenHeigth:=getdevicecaps(GetDc(0),VERTRES);
               screenFrequency:=getdevicecaps(getdc(0),VREFRESH);
               DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
               DevMode.dmPelsWidth:=1024;
               DevMode.dmPelsHeight:=768;
               DevMode.dmDisplayFrequency:=screenFrequency;
               ChangeDisplaySettings(DevMode,0); //设置新的显示参数
              end;
          end
        else
           change:=false;procedure TmainFRM.FormDestroy(Sender: TObject);     //在这里恢复原来的分辨率
    var
      flag:boolean;
      DevMode:Tdevmode;
    begin
        if change then
           begin
             flag:=EnumDisplaySettings(nil,0,DevMode); //取得旧的显示参数
             if flag then
              begin
               DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
               DevMode.dmPelsWidth:=screenWidth;
               DevMode.dmPelsHeight:=screenHeigth;
               DevMode.dmDisplayFrequency:=screenFrequency;
               ChangeDisplaySettings(DevMode,0); //设置新的显示参数
              end;
           end;
    end;