窗口自适应问题

hkle 2003-07-03 09:17:47
我在17寸显示器设计窗体的大小为1024×768,如果放到15寸显示器就会显示不完,请问如何实现设计的所有控件能检测出窗体的分辨率然后自动适应窗体大小?就是说能够保持全屏显示的状态。高分奉送!
...全文
62 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
slley 2003-07-03
  • 打赏
  • 举报
回复
定义一个全程变量
var
devmode:tDevicemode;

{on form create procedure}
{if screen.width<>orignwidth then//更改分辨率
begin
if EnumDisplaySettings(nil,0,devmode)then
begin
devmode.dmfields:=dm_pelswidth OR dm_pelsheight;
devmode.dmpelswidth:=orignwidth;{宽度}
{devmode.dmpelsheight:=orignheight;{高度}
{ChangeDisplaySettings(devmode,0);{更改设置}
//end;
//end;
lonaerd 2003-07-03
  • 打赏
  • 举报
回复
说句良心话,作两套还更实用些;
至于如何计算窗体和控件的尺寸,到现在都没有人写一个通用模块(我在VB里有个模块可以实现,效果不错,针对任意控件和数量)来实现;如果按照上面想当然的计算每个控件的位置和比例来调整,特别是窗体中控件很多的时候,各位最好去当美工员比较合适。
我说这话没别的意思,因为问这个问题的人很多,但现在大部分回答都只从理论上回答,却没有见到一个人切切实实的写点好模块来使用。这样得来的分是否水分太大?
hkle 2003-07-03
  • 打赏
  • 举报
回复
还有一种笨办法,也在这里让大家参考参考,就是做两套窗体,一套是800×600大小的,一套是1024×768的,然后再通过判断当前的分辨率来选择显示哪套窗体!当然这种方法只适用小的软件,大的话肯定是不大实际的!
想问问如何获得当前显示器的分辨率?有代码参考吗?最好是一个函数或过程!
hkle 2003-07-03
  • 打赏
  • 举报
回复
下面是我的一个朋友给我的思路,请大家帮忙看看,这样能够实现吗?能给出具体的实现代码吗?

变量,窗体,X比例,Y比例

取得窗体的宽,高;
取得屏幕的宽,高;
计算宽的比例,保存在X比例
计算高的比例,保存在Y比例

设定窗体大小。
列举控件
设置控件的宽,高
设置控件的位置
结束
设置公式:
原来大小*比例,宽,X坐标用X比例参数
高,Y坐标用Y比例参数
lovelymelon 2003-07-03
  • 打赏
  • 举报
回复
上面的代码是强制把运行该程序的计算机的分辨率改成你在设计时的分辨率

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

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

Const
Orignwidth=800;
Orignheight=600;

procedure TForm1.FormCreate(Sender: TObject);
begin
scaled:=true;
if (screen.width<>orignwidth) then
begin
height:=longint(height)*longint
(screen.height) div orignheight;
width:=longint(width)*longint
(screen.width) div orignwidth;
scaleby(screen.width , orignwidth);
end;
end;
lovelymelon 2003-07-03
  • 打赏
  • 举报
回复
上面的代码是强制把运行该程序的计算机的分辨率改成你在设计时的分辨率

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

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

Const
Orignwidth=800;
Orignheight=600;

procedure TForm1.FormCreate(Sender: TObject);
begin
scaled:=true;
if (screen.width<>orignwidth) then
begin
height:=longint(height)*longint
(screen.height) div orignheight;
width:=longint(width)*longint
(screen.width) div orignwidth;
scaleby(screen.width , orignwidth);
end;
end;
lovelymelon 2003-07-03
  • 打赏
  • 举报
回复
const
Orignwidth=1024;
Orignheight=768;

procedure TForm3.FormCreate(Sender: TObject);
var
devmode:tDevicemode;
begin
if screen.width<>orignwidth then
begin
if EnumDisplaySettings(nil,0,devmode) then
begin
devmode.dmfields:=dm_pelswidth OR dm_pelsheight ;
devmode.dmpelswidth:=orignwidth; {宽度}
devmode.dmpelsheight:=orignheight;{高度}
ChangeDisplaySettings(devmode,0); {更改设置}
end;
end;
end;
AaronChengBJ 2003-07-03
  • 打赏
  • 举报
回复
设置控件的Anchors属性。
hammer_shi 2003-07-03
  • 打赏
  • 举报
回复
和显示器的分辨率是有关系.
你把字体改为宋体可以控制.但是分辨率估计要在同一分辨率下编译.
mrfanghansheng 2003-07-03
  • 打赏
  • 举报
回复
这是个处理起来比较复杂的问题,以前有很多人都提过。我说说我大概知道的处理方法:

1.在窗体上动态定位组件时多使用screen这个对象.它的宽高是根据分辨率的变化而变化的

2.设置一些容器组件或表格组件的Anchors属性,那是定位边距的,设置好了对于窗体变化时该组件自适应有很大作用(可惜并不是所有组件都有此属性)

3.在窗体变化要求多的界面上多使用容器控制


CloneCenter 2003-07-03
  • 打赏
  • 举报
回复
程序不是这么设计的,尽量多利用控件的 Align 属性控制它和整个窗体的大小改变而改变。
如果制作的是一个对话框,则固定大小,不要设计的太大。一般满足 800X600 就可以了。如果可能最好 640X480 也可以用。
OO_is_just_P 2003-07-03
  • 打赏
  • 举报
回复
显示器没关系,与分辨率有关系。
用 naughtyboy(一切都是为了明天) 的方法只能改变窗体的大小,可是上面的控件还是不能显示完全。可以动态调整各个控件的大小。
microjuz 2003-07-03
  • 打赏
  • 举报
回复
naughtyboy列出来的都是默认值,可以不用写的
microjuz 2003-07-03
  • 打赏
  • 举报
回复
15寸下窗体的大小也是1024*768(如果开始那条栏去掉的话)
naughtyboy 2003-07-03
  • 打赏
  • 举报
回复
form OnCreate
scaled := true;
Self.height := Screen.Height;
Self.Width := Screen.Width;
bluemeteor 2003-07-03
  • 打赏
  • 举报
回复
寒一个.....这个和多少寸显示器无关吧

5,392

社区成员

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

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