Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1257672
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2008-10-20 10:36:23



经过了一个上午折腾,终于搞定了,其实代码很简单!  
  与大家分享:  
   
    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的

呵呵,这样方法是不错



[新闻]硅谷VC过冬:屯现金 广节流 慎投资
博客园首页 社区 新闻频道 小组 博问 网摘 闪存
阅读(301) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~