我想做自适应窗体。请教 我开程序的时候,分辨率是1024×768,但客户的机器分辨率有时候更高,或更低,我想知道如何让我的窗体自动适应客户的分辨率,如何做,最好能解释详细点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 办法1:干吗要适应客户的分辨率,直接把客户的分辨率改成你设计时候的就可以了啊。 这 种 方 法 不 改 变 表 单 本 身, 而 是 将 屏 幕 分 辨 率 更 改 为 与 表 单 设 计 时 用 到的 分 辨 率 相 同。 它 需 要 用 到WINDOWS API 函 数EnumDisplaySettings 和ChangeDisplaySettings, 前者 取 当 前 显 示 模 式 信 息, 后 者 则 更 改 显 示 设 置, 具 体 参 数 的 含 义 请 参 见DELPHI 帮 助。 设 计 时 宽 度 常 量 和 高 度 常 量 的 定 义 如 方 法 一。 procedure TForm1.FormCreate(Sender: TObject);vardevmode:tDevicemode;beginif screen.width<>orignwidth then begin if EnumDisplaySettings(nil,0,devmode) then begindevmode.dmfields:=dm_pelswidth OR dm_pelsheight ;devmode.dmpelswidth:=orignwidth; {宽度}devmode.dmpelsheight:=orignheight;{高度}ChangeDisplaySettings(devmode,0); {更改设置}end;end;end; 办法2:老老实实的适应客户,没有办法,谁让他们是上帝呢 先 在 表 单 单 元 的Interface 部 分 定 义 两 个 常 量, 表 示 设 计 时 的 屏 幕 的 宽 度 和 高度( 以 像 素 为 单 位)。 在 表 单 的Create 事 件 中 先 判 断 当 前 分 辨 率 是 否 与 设 计 分辨 率 相 同, 如 果 不 同, 调 用 表 单 的SCALE 过 程 重 新 能 调 整 表 单 中 控 件 的 宽 度和 高 度。 ConstOrignwidth=800;Orignheight=600;procedure TForm1.FormCreate(Sender: TObject);beginscaled:=true;if (screen.width<>orignwidth) thenbeginheight:=longint(height)*longint(screen.height) div orignheight;width:=longint(width)*longint(screen.width) div orignwidth;scaleby(screen.width , orignwidth);end;end;缺点如下: SCALE 过 程 在 调 整 控 件 宽 度 和 高 度 的 同 时, 也 自 动 调 整 控 件 字 体 的 大 小,以 适 应 新 的 分 辨 率, 但 美 中 不 足 的 是 它 并 不 改 变 控 件 的 顶 点 坐 标 位 置, 也就 是 说, 该 过 程 不 改 变 控 件 之 间 的 相 对 位 置 关 系。 要 想 调 整 控 件 之 间 的 选队 相 对 位 置, 还 需 要 自 己 编 程 实 现。 谢谢,我是初学者,这是毕业设计,老师要求自适应,还要答疑,wudi——1982,你可以告诉我那些代码的具体含义吗?例如screen代表什么?我的QQ:3177553,万望执教。。不胜感激 ConstOrignwidth=800;//这是定义的常量,代表你开发时候的分辨率,用来跟客户的分辨率进行对比Orignheight=600;procedure TForm1.FormCreate(Sender: TObject);//这是窗体生成的事件,里边放窗体的初始化代码beginscaled:=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;明白否 ...form.OnCreate...begin SetBounds(Screen.WorkAreaLeft,Screen.WorkAreaTop,Screen.WorkAreaWidth,Screen.WorkAreaHeight);end; delphi&vs.net如果偶在800*600下写的窗体放到1024*768下运行是什么效果啊是不是会显得相对小了点 不好意思偶这里现在没有能上1024*768的显示器试不成 借这个帖子问问你啊 delphi Timage控件的问题 可算看到批梦魇的受害者 编写Delphi一般都用什么编译器呢? 1)双击stringgrid最上面一行fixedrows的分隔线时触发什么事件?2)单击stringgrid最上面一行fixedrows的Cells时触发什么事件?在线等待! str咋用... 如果是你。你选什么。 请问用什么软件可以打开后缀为.ps的文档 delphi真能支持.net平台的开发吗? delphi的源代码怎么还没有VB多?delphi到底行不行了 采用serversocket接收数据插入数据库的效率问题 sql模糊查询的参数怎磨表示 请教一个安装制作的问题!
干吗要适应客户的分辨率,直接把客户的分辨率改成你设计时候的就可以了啊。
这 种 方 法 不 改 变 表 单 本 身, 而 是 将 屏 幕 分 辨 率 更 改 为 与 表 单 设 计 时 用 到的 分 辨 率 相 同。 它 需 要 用 到WINDOWS API 函 数EnumDisplaySettings 和ChangeDisplaySettings, 前者 取 当 前 显 示 模 式 信 息, 后 者 则 更 改 显 示 设 置, 具 体 参 数 的 含 义 请 参 见DELPHI 帮 助。 设 计 时 宽 度 常 量 和 高 度 常 量 的 定 义 如 方 法 一。 procedure TForm1.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;
先 在 表 单 单 元 的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;
缺点如下: SCALE 过 程 在 调 整 控 件 宽 度 和 高 度 的 同 时, 也 自 动 调 整 控 件 字 体 的 大 小,以 适 应 新 的 分 辨 率, 但 美 中 不 足 的 是 它 并 不 改 变 控 件 的 顶 点 坐 标 位 置, 也就 是 说, 该 过 程 不 改 变 控 件 之 间 的 相 对 位 置 关 系。 要 想 调 整 控 件 之 间 的 选队 相 对 位 置, 还 需 要 自 己 编 程 实 现。
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;
明白否
SetBounds(Screen.WorkAreaLeft,Screen.WorkAreaTop,Screen.WorkAreaWidth,Screen.WorkAreaHeight);
end;
放到1024*768下运行是什么效果啊是不是会显得相对小了点 不好意思偶这里现在没有能上1024*768的显示器
试不成 借这个帖子问问你啊