关于大/小字体下的界面自动调整(50分)

  • 主题发起人 主题发起人 DNChen
  • 开始时间 开始时间
D

DNChen

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近写一个程序,环境是96dpi小字体的,花了很多时间设计界面,
然后在朋友测试时发现界面全部乱了,经过检查,发现他的环境是
120dpi大字体,所以每个文字的大小都有了改变,同样是中文字宋体
9pt,最后显示大小会随系统的大小字体设置不同而改变。

然后尝试着看了tform的代码,并且问了一个朋友,发现可以通过修改
pixelsperinch属性来调节,当大字体环境下,如果修改该值为144,显
示效果和小字体下的96一样。但是问题出在,当一个form created之后
修改该属性根本毫无作用,只有在Design的时候修改才会产生作用。我
试过用update,refresh和invalidate去刷新窗口,还是不起作用,将修
改后的值通过一个label送出来,发现该值确实变了,该值不是只读的。

我应该使用什么函数才可以使这个修改生效?或者说,如何才能在不同的
字体设置下使用不同的Pixelsperinch属性?对了,如果我在大字体下将
该值改成144,在小字体下显示的时候又太小了。8-(
 
HI DNChen也许你可以在PROJECT的SOURCE里改,如果不行,试着继承一个窗口
在CREATE事件中写代码(不知道是否可以直接写TFORM1的CREATE事件,我想
应该可以的)如果CREATE事件有问题,不知道是否可以用ONLOADED事件
继承FORM没玩过,有错大家究

类似的程序倒很好玩,不妨把哪个什么pixelsperinch贴出来看看:)
 
太简单了, 在TForm中有一个属性 Scared, 默认是True, 代表在不同
字体下自动调整, 将其设成 False 就OK! Good Luck!
 
to Jimchael Tsee :
谢谢,改成false后一切就OK了。

to CJ:

直接写Create事件没有用,我试过了。不过修改Project
Source倒是一个方法。Pixelsperinch是tform的一个属性,
我看了源程序,如果用户设定的话,就使用用户设定值,
不设定就使用了screen的pixelsperinch。可惜的是screen
的pixelsperinch是只读属性。我的一个朋友用了一个非常
卑鄙的手段(直接写用指针写screen.pixelsperinch)往这
个只读属性里写值成功,将这个写操作放Project source中
的后窗体也实现了在大字体中按照原来的小字体中设定的界
面同样的显示效果。

这种方法我想和jimchael Tsee(好长的名字)的方法相比,
有一个好处,就是只要写一次,以后的每个form就不需要手
动设置scared为false了。坏处是,scared属性就失效了。
我试出了不同字体设置的转换公式,最终能够适应任何(包括
用户字定义字体大小)环境。

用这种方法实现的最终代码如下:
program instp;

uses
Forms,
instu in 'instu.pas' {install};

{$R *.RES}
const ppinch=96

var p:^integer;

begin
Application.Initialize;
p:=@screen.PixelsPerInch;
p^:=round(p^/ppinch*p^);
application.CreateForm(Tinstall,install);
Application.Run;
end.

其中ppinch用设计时的pixelsperinch代替,你可以
随便打开一个窗体,然后在属性编辑器中找到这个数
值。

不要问我这个计算公式是什么原理求出来的,因为
我是硬试出来的。8-(
 
呵呵,这个问题就结了吧,想不到答案这么简单。
 
接受答案了.
 
如何能让form的height,width保持不变,在任何分辨率下.
希望指点.
 
后退
顶部