窗体自动适应分辨率!与大家共同分享! Delphi / Windows SDK/APIhttp://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的
呵呵,这样方法是不错