只知:
form1.width:=screen.width
form1.heigh:=screen.heigh;

解决方案 »

  1.   

    wzrlover的是人工设自动 : Form1.Scale := True;
      

  2.   

    delphi中分辨率自适应不需要编码实现,只需要修改窗口和控件的属性align和anchor就可以了,你试试吧,祝你好运。
      

  3.   

    OnCreate事件中动态调整窗体的Font属性!其它控件的ParentFont全为TRUE!窗口合理排版,控件合理摆放,设置好和父控件的关系!必要的时候也可以在OnResize事件中写代码!
      

  4.   

    zcs_1(生生不息)说的设置anchors达不到我的要求。anchor只是锚定控件上下左右位置,如果窗口有几个控件,那这几个控件相互间的位置会随着改变。
      

  5.   

    有点难度,有获得系统屏幕信息的api吗?我不清楚,希望你早日搞懂
      

  6.   

    是窗口适应分辨率吧,获得系统分辨率应该很简单吧!
    var
      x,y:integer;
      sysinfo:Tsysteminfo;
      str:string;
    begin
    getsysteminfo(sysinfo);
    x:=getsystemmetrics(0);
    y:=getsystemmetrics(1);
    str2:='显示器分辨率:   '+ inttostr(x)+'*'+inttostr(y);
    end;       
      

  7.   

    http://www.csdn.net/expert/topic/981/981001.xml?temp=.7789728
    到这个贴子里看一看,希望你能开兴,里边有,不过要你自己找一下:)
      

  8.   

    要获得屏幕分辨率和设置它都是非常容易的,然而要让各种form上的控件自适应非常难,几乎不能实现。很多人通过摆放Tpanel控件来做,其实还是达不到效果。
      

  9.   

    大多数控件都有Anchors属性,配合Panel,应该可以达到预期的效果
      

  10.   

    最好的方法,可能就是程序启动时首先检测系统分辨率,如果不符合要求,就更改为符合要求的。比如你的分辨率是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;其中两个全局参数很重要。
    希望能有更好的方法。
      

  11.   

    to:  wmh_654321 (qqq)  
    主要是设置属性align,然后再设置archor。
    我已经通过设属性align做到了自适应,你应该了解align各属性值的含义。
      

  12.   

    如果用户的显卡不支持程序的分辨率aladinhxh(航)的方法就无效了。
      

  13.   

    屏幕分辨率用不着api吧,调用screen对象就可以了
      

  14.   

    假设你在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;
      

  15.   

    我以前用过的方法
    procedure TfrmMain.FormCreate(Sender: TObject);
    var
        devmode:tDevicemode;
    begin
        if Screen.Width <> 1024 then
        begin
            if MessageDlg('为了本软件界面的美观性,强烈建议在【1024×768】的分辨率下运行,'
                + #10 + '除非硬件不支持,是否将系统的分辨率切换到【1024×768】?',
                mtConfirmation, [mbYes, mbNo], 0) = mrNo then
            begin
                    ScaleBy(screen.Width, 1024);
                    //调整某些控件的位置大小
                    fcStatusBar1.Panels[0].Width := IntToStr(StrToInt(fcStatusBar1.Panels[0].Width) - 55);
                    fcStatusBar1.Panels[3].Width := '0';
                    fcStatusBar1.Panels[4].Width := '0';
                    fcStatusBar1.Panels[5].Width := '0';
                    CoolBar1.Height := CoolBar1.Height + 5;
            end
            else
            begin
                if EnumDisplaySettings(nil, 0, devmode)  then
                begin
                    devmode.dmfields:=dm_pelswidth  OR  dm_pelsheight ;
                    devmode.dmpelswidth:= 1024; {宽度}
                    devmode.dmpelsheight:= 768;{高度}
                    ChangeDisplaySettings(devmode,0); {更改设置}
                end;
            end;
        end;
    end;