窗体属性设置问题

mnlisa 2003-10-29 09:51:46
设置哪个属性可以使这个窗体充满这个屏幕,而且窗体上的全部控件随着窗体的大小而变化呢?? (同时把分辨率由800*600改为1024*768时也生效!)
...全文
29 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinesetree 2003-10-29
  • 打赏
  • 举报
回复
随着变法也不太好
可以试一下:
控件的Anchors--
akleft := true;
aktop := true;
akright := true;
akbottom := true;
RaulWhite 2003-10-29
  • 打赏
  • 举报
回复
楼主可以设置一下ScaleBy 和 PixelPerInch 及Scaled属性方法试一下
2353939 2003-10-29
  • 打赏
  • 举报
回复
mark
fenglaile 2003-10-29
  • 打赏
  • 举报
回复
其实就是分辨率的问题
转载;

如何让程序随屏幕分辨率的不同而改变控件的大小

procedure TForm1.FormCreate(Sender: TObject);
//假设原来的设计环境为800x600
var
FWidth:integer;
begin
if(Screen.width<> 800)then
begin
FWidth:=Width;
Scaled:=TRUE;
Font.Size:=(Width DIV FWidth)*Font.Size;//字体大小调整
ScaleBy(Screen.Width,800); //控件大小调整
Height:=longint(Height)*longint(Screen.Height)DIV 600;
Width:=longint(Width)*longint(Screen.Width)DIV 800;//窗口大小调整
end;
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////

不同的分辨率下原来的窗口界面可能变得面目全非,对于这种问题,我一般采取以下方式:
先取得分辨率方法有如下:
procedure TForm1.FormCreate(Sender: TObject);
var
sx,sy:Integer;
begin
sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽
sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高
end;
也可以用Screen.width/Screen.Height来取得
也可以用Var DevMode:TDeviceMode;
Begin
EnumDisplaySettings(nil,0,DevMode)
sx := DevMode.dmPelsWidth
sy := DevMode.dmPelsHeight 来取得
end
也可以用sx := GetDeviceCaps(GetDC(Form1.Handle), HORZRES)
sx :=GetDeviceCaps(GetDC(Form1.Handle), VERTRES) 来取得而后有以下几种方法:

1. 判断分辨率并选择相应的分辨率方案;
(对每种分辨率设计一套控件/字体的大小方案用于在不同分辨率下选择)

2. 固定窗口大小;
procedure TForm1.FormResize(Sender: TObject);
begin
width:=640; height:=480;
left:=0; top:=0;
end;

3. 使用procedure ScaleBy(M, D: Integer)这个过程来对可视控件进行大小调节(此过程不调节窗口大小,也不变动控件的left和top,对控件的大小按M/D比例来调节),具体如下:
procedure TForm1.FormCreate(Sender: TObject);
//假设原来的设计环境为800x600
var
FWidth:integer;
begin
if(Screen.width<> 800)then
begin
FWidth:=Width;
Scaled:=TRUE;
Font.Size:=(Width DIV FWidth)*Font.Size;//字体大小调整
ScaleBy(Screen.Width,800); //控件大小调整
Height:=longint(Height)*longint(Screen.Height)DIV 600;
Width:=longint(Width)*longint(Screen.Width)DIV 800;//窗口大小调整
end;
end;
用此种方法比较实用,而且使用比较简单,基本能适应大多数环境。

4. 调节分辨率到所需的分辨率(即设计时的分辨率,此法对要求封闭的系统比较有用,如工控、触摸屏等等)
procedure TForm1.FormCreate(Sender: TObject);
var
FWidth:integer;
DevMode:TDeviceMode;
begin
if(Screen.width<> 800)then
begin
  Result:=EnumDisplaySettings(nil,0,DevMode); //取得旧的显示参数
  if Result then
  begin
  DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT;
 DevMode.dmPelsWidth:=800;
  DevMode.dmPelsHeight:=600;
ChangeDisplaySettings(DevMode,0); //设置新的显示参数
end;
end;
chinesetree 2003-10-29
  • 打赏
  • 举报
回复
不用设autosize和align
RaulWhite 2003-10-29
  • 打赏
  • 举报
回复
刚才试了一下,没弄好,
SCaleBy是方法
mnlisa 2003-10-29
  • 打赏
  • 举报
回复
to chinesetree :好像不行啊,这些属性设置为true,align为alclient ,autosize设置为true
但是还是不行的 。

to raulwhite:具体怎么设置啊?都没有看见 scaleby的属性,还有pixelpreInch设置为多少才可以那?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧