如何使自己FORM内的控件不受屏幕分辨率的影响(100分)

  • 主题发起人 Tigerchamp
  • 开始时间
T

Tigerchamp

Unregistered / Unconfirmed
GUEST, unregistred user!
在800*600下做了一个FORM,但到640*480下一看却变了形,
控件的相对位置都变了,不知道如何解决,请教诸位高手。
 
真的要解决是十分困难的,你要与系统打交道,获得系统事件,FORMRESIZE事件,
并在其中改变每一个控件的大小(可以用FOR I:= 0 TO CONPONENTCOUNT DO
CONPONENTS AS ...来实现)
我用的方法最简单:在640*480下写程序,不让程序改变窗口的大小,或者不让程序
超过我指定大大小,在FORM的ONRESIZE事件中解决,大概的代码如下:
IF SELF.HEIGHT = XXX THEN
SELF.HEIGHT := XXX;
IF SELF.WIDTH := XXX THEN
SELF.WIDTH :=XXX;
这样,不管在800*600还是在1024*768都OK
 
我好象在哪份FAQ上看到过相关问题的解答, 方法很简单, 不超过20行代码
控件的相对位置可保持不变, 但是不能改变预先设定的字体大小. 我找找,
明天给答案
 
implementation
const
ScreenWidth: LongInt = 800; {I designed my form in 800x600 mode.}
ScreenHeight: LongInt = 600;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
scaled := true;
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;
end;

下面是解决字体大小的代码:
USES typinfo; {Add this to your USES statement.}

var
i: integer;
begin
for i := componentCount - 1 downto 0 do
with components do
begin
if GetPropInfo(ClassInfo, 'font') <> nil then
font.size := (NewFormWidth DIV OldFormWidth) * font.size;
end;
end;
 
把你的Form的Scaled属性改一下试试看,
 
去我的主页下载一个RESIZE的控件即可
www.nease.net/~liyaping 中的控间精品屋
 
改 FORM 的 Scaled 为 False
保证 FORM 的 ParentFont 为 False

其他的他们都说了,我就不再重复,我实现了的.不过我现在
喜欢做成 640*480,这样如果屏幕在 800*600 或 以上时,
我就让它居中,看起来秀气些.
 
几种方法都试了一下,觉得还是在640*480下编效果较好。谢谢CI,
Another eyes 及其他诸位。
 

Similar threads

顶部