DELPHI中自适应表单的实现

wwwcom881

wwwcom881

2016-02-19 16:44

今天图老师小编要跟大家分享DELPHI中自适应表单的实现,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

  我们知道,屏幕分辨率的设置影响着表单布局,假设你的机器上屏幕分辨率是800*600,而最终 要分发应用的机器分辨率为640*480,或1024*768,这样你原先设计的表单在新机器上势必会 走样。这时你一定希望表单能自己适应不同的分辨率,下面就有两种方法可供你参考。

  一、根据新的分辨率自动重画表单及控件

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  先在表单单元的Interface部分定义两个常量,表示设计时的屏幕的宽度和高度(以像素为 单位)。在表单的Create事件中先判断当前分辨率是否与设计分辨率相同,如果不同,调用表 单的SCALE过程重新能调整表单中控件的宽度和高度。

ConstOrignwidth=800;Orignheight=600;procedureTForm1.FormCreate(Sender:TObject);beginscaled:=true;if(screen.widthorignwidth)thenbeginheight:=longint(height)*longint(screen.height)divorignheight;width:=longint(width)*longint(screen.width)divorignwidth;scaleby(screen.width,orignwidth);end;end;

  SCALE过程在调整控件宽度和高度的同时,也自动调整控件字体的大小,以适应新的分辨率, 但美中不足的是它并不改变控件的顶点坐标位置,也就是说,该过程不改变控件之间的相对 位置关系。要想调整控件之间的选队相对位置,还需要自己编程实现,有兴趣的读者可试一 试。

  二、将机器分辨率更改为设计时的分辨率

  这种方法不改变表单本身,而是将屏幕分辨率更改为与表单设计时用到的分辨率相同。它需要用到WINDOWSAPI函数EnumDisplaySettings和ChangeDisplaySettings,前者取当前显示模式信息,后者则更改显示设置,具体参数的含义请参见DELPHI帮助。设计时宽度常量 和高度常量的定义如方法一。

procedureTForm1.FormCreate(Sender:TObject);vardevmode:tDevicemode;beginifscreen.widthorignwidththenbeginifEnumDisplaySettings(nil,0,devmode)thenbegindevmode.dmfields:=dm_pelswidthORdm_pelsheight;devmode.dmpelswidth:=orignwidth;{宽度}devmode.dmpelsheight:=orignheight;{高度}ChangeDisplaySettings(devmode,0);{更改设置}end;end;end;

  以上两种方法在WINDOWS95+DELPHI3.0环境下均已通过,二者相比,前者是主动适应,后者则是被动适应。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

DELPHI中自适应表单的实现

编程语言 网络编程
DELPHI中自适应表单的实现

通过JAVAScript实现页面自适应

Web开发
通过JAVAScript实现页面自适应

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

圆角自适应宽度按钮的css实现

Web开发
圆角自适应宽度按钮的css实现

如何实现iframe(嵌入式帧)的自适应高度

电脑网络
如何实现iframe(嵌入式帧)的自适应高度

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

使TStringGrid自适应宽度

编程语言 网络编程
使TStringGrid自适应宽度

基于JTable的列宽与内容自适应的实现方法

编程语言 网络编程
基于JTable的列宽与内容自适应的实现方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

繁华落尽后,剩下什么 - QQ伤感分组

繁华落尽后,剩下什么 - QQ伤感分组

oracle 10g常见问题精选(1)

oracle 10g常见问题精选(1)
下拉加载更多内容 ↓