一直以来 我都没有找到很好的使应用程序适应不同分辨率的方法,各位江湖的老大们 可否教教小弟 ?

解决方案 »

  1.   

    delphi的组件中有几个属性,最上面的几个,他们可以确定组件再窗口发生变化时的变化方式,例如时以左为准,右为准,两端对齐。等等
      

  2.   

    你的意思是说不同分辨率下窗口的大小成比例。可以用screen.width * x% screen.height * y %
      

  3.   

    考查控件的:
    Anchors,都设置为True试试.
      

  4.   

    我看到一个ElasicForm,叫"弹性窗体控件",可以适应窗体大小和分辨率,或许有启发.
      

  5.   

    Anchors里面设置的方法好像不是太完美
    有时候,窗口变成满屏的,但是按钮啊什么的就移动位置了
    不知道有没有更好的方法出现,期待中,关注中。
      

  6.   

    首先要看你有什么用途,如果仅仅是让窗体适应屏幕的话,用 Anchors 属性就可以了也可以先取得 Screen.Width 或 Screen.Height 来决定下一步的动作
      

  7.   

    1、 设置 Form确的 Scaled 属性为 True.
    2、 设置 AutoScroll 为 False. 
    procedure TForm1.FormCreate(Sender: TObject);
    var
    ScreenWidth: LongInt = 800; {在分辨率为 800x600 的模式下编程.}
    ScreenHeight: LongInt = 600;
    begin
      scaled := true;
      if (screen.width <> ScreenWidth) then  begin
        //以下指form1的height & width
        height:=longint(height)*longint(screen.height) DIV ScreenHeight;
        width := longint(width) * longint(screen.width) DIV ScreenWidth;
        scaleBy(screen.width, ScreenWidth);
      end;
    end;
      

  8.   

    Const
    Orignwidth=1024;
    Orignheight=768;为自定义的屏幕分辨率的大小
    在FormCreate中添加以下代码
       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;
      

  9.   

    上面  bluishsky(清风)  的方法相对而言可能更实用一些……(在全屏状态下)
    其他采用缩放的方法均都有缺陷……(主要还是适应后美观的问题)
    个人感觉这个东西除非在考虑时就用相对的方法来定位(这需要做大量的工作),简单的方法似乎还是没有找到……
      

  10.   

    请问清风,如何实现,那个对象控制屏幕分辨率,是SCREEN吗
      

  11.   

    请参见贴子:
    http://community.csdn.net/Expert/topic/3521/3521852.xml?temp=.5320551但是其中的刷新率设置,还没有测试成功。
      

  12.   

    我重新测试了一下,正常工作代码如下:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Button6: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button6Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    function GetDisplayFrequency: Integer;//得到刷新率
    var
      DeviceMode: TDeviceMode;
    begin
      EnumDisplaySettings(nil, Cardinal(-1), DeviceMode);
      Result := DeviceMode.dmDisplayFrequency;
    end;procedure ChangeDisplayFrequency(iFrequency:Integer);//更改刷新率
    var
      DeviceMode: TDeviceMode;
    begin
      EnumDisplaySettings(nil,Cardinal(-1), DeviceMode);
      DeviceMode.dmDisplayFrequency:=Cardinal(iFrequency);
      ChangeDisplaySettings(DeviceMode,CDS_UPDATEREGISTRY);
    end;function Resolution(X,Y:word):boolean;
    var
      DevMode:TDeviceMode;
    begin
      Result:=EnumDisplaySettings(nil,0,DevMode);
      if Result then
      begin
        DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT;
        DevMode.dmPelsWidth:=X;
        DevMode.dmPelsHeight:=Y;
        Result:=ChangeDisplaySettings(DevMode,0)=DISP_CHANGE_SUCCESSFUL;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if Resolution(800,600) then ShowMessage('800×600模式!');
      ChangeDisplayFrequency(85);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      if Resolution(1280,1024) then ShowMessage('1280X1024模式!');
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      if Resolution(1024,768) then ShowMessage('1024X768模式!');
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
      ShowMessage(IntToStr(GetDisplayFrequency));
      ChangeDisplayFrequency(85);
    end;procedure TForm1.Button6Click(Sender: TObject);
    begin
      ShowMessage(IntToStr(GetDisplayFrequency));
      ChangeDisplayFrequency(75);
    end;procedure TForm1.Button5Click(Sender: TObject);
    begin
      ShowMessage(IntToStr(GetDisplayFrequency));
      ChangeDisplayFrequency(60);
    end;end.
      

  13.   

    现在用户的机器在部分都是1024*768设置 Form确的 Scaled 属性为 True. 或者做成MDI窗口也行