delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
窗体自动适应分辨率!与大家共同分享! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061225145914115.html
经过了一个上午折腾,终于搞定了,其实代码很简单!  
  与大家分享:  
   
    const  
   
      ScreenWidth:   LongInt   =   1024;   {I   designed   my   form   in   800x600   mode.}  
   
      ScreenHeight:   LongInt   =   768;  
   
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
  Function   TForm1.BigToSmall():double;  
  begin  
        BigToSmall:=Screen.Width/ScreenWidth     ;  
  end;  
  Function   TForm1.SmallToBig():double;  
  begin  
        SmallToBig:=Screen.Width/ScreenWidth;  
  end;  
  Function   TForm1.initWindowsPosition():boolean;  
  var  
    SizeDiv:double;  
    i:integer;  
  begin  
        if   Screen.Width<=     ScreenWidth   then  
              begin  
                    SizeDiv:=     BigToSmall  
              end  
        else  
              begin  
                    SizeDiv:=     SmallToBig    
              end;  
   
        //============================================  
      for   i:=ComponentCount-1   downto   0   do  
      begin  
          if(Components[i]   is   TSpeedButton)   then  
            begin  
                TSpeedButton(Components[i]).Top:=Round(SizeDiv*(TSpeedButton(Components[i]).Top));  
                TSpeedButton(Components[i]).left:=Round(SizeDiv*(TSpeedButton(Components[i]).left));  
                TSpeedButton(Components[i]).Width:=Round(SizeDiv*(TSpeedButton(Components[i]).Width));  
                TSpeedButton(Components[i]).Height:=Round(SizeDiv*(TSpeedButton(Components[i]).Height));  
            end;  
          If   (Components[i]   is   TPanel)   then  
            begin  
                TPanel(Components[i]).Top:=Round(SizeDiv*(TPanel(Components[i]).Top));  
                TPanel(Components[i]).left:=Round(SizeDiv*(TPanel(Components[i]).left));  
                TPanel(Components[i]).Width:=Round(SizeDiv*(TPanel(Components[i]).Width));  
                TPanel(Components[i]).Height:=Round(SizeDiv*(TPanel(Components[i]).Height));  
            end;  
      end;  
  end;  
  procedure   TForm1.FormCreate(Sender:   TObject);  
  var  
  i:   integer;  
   
  begin  
          Form1.Width:=990;  
          Form1.Height:=724;  
          initWindowsPosition;  
  end;

有觉悟。  
   
 

有沒有更好的辦法????

嗯,谢谢了。

DELPHI的窗体不是自动适应分辨率变化的吗?

DELPHI的窗体自动适应?  
  问题是窗体上的控件能不能随着自动适应才是重要的吧?

也可以啊,DELPHI上的控件都有ALIGN属性,可以设为ALTOP,ALBOTTOM等,这样应该可以满足要求啊。

同意黑鹰说的,你这个样子窗体控件都变大了,字体大小怎么解决?还是用altop,alclient等方式解决比较好。

呵呵,其实有不用写代码的方法

to     whbo(王红波(年轻人,要有所作为))    
   
   
  什么方法

字体是自动适应的,你同样的字体,分辨率低时大,分辨率高时小。  
  for   i:=ComponentCount-1   downto   0   do  
  begin  
  if(Components[i]   is   TSpeedButton)   then  
  begin  
  If   (Components[i]   is   TPanel)   then  
  begin  
  TPanel(Components[i]).Top:=Round(SizeDiv*(TPanel(Components[i]).Top));  
  TPanel(Components[i]).left:=Round(SizeDiv*(TPanel(Components[i]).left));  
  TPanel(Components[i]).Width:=Round(SizeDiv*(TPanel(Components[i]).Width));  
  TPanel(Components[i]).Height:=Round(SizeDiv*(TPanel(Components[i]).Height));  
  end;  
  end;  
  可以改成  
  for   i:=ControlCount-1   downto   0   do  
  with   Controls[i]   do  
  begin  
      Top:=Round(SizeDiv*Top);  
      left:=Round(SizeDiv*left);  
      Width:=Round(SizeDiv*Width);  
      Height:=Round(SizeDiv*Height);  
  end;

使用控件的Anchors属性,全部搞定,还是要多读书啊

Alclient+Anchors最好了,自动缩放无用。

估计楼主郁闷死了……

mark

mark

有没有用过form的scaled属性?  
   
  把它设为true,   你所需要的一切就都有了

什么都不用设啊,我调了好几遍哦,难道是我眼神不好?????

Scaled属性默认就是true的

呵呵,这样方法是不错

posted on 2008-10-20 10:33 delphi2007 阅读(388) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。