J jefrin Unregistered / Unconfirmed GUEST, unregistred user! 2003-06-18 #1 如何在不同分辨率中1024*768和800*600中自动实现界面的缩放功能以适应屏幕大小!!!急用!!先给200,解决后我的积分会清囊相送!!谢谢了!!!
X xusong168 Unregistered / Unconfirmed GUEST, unregistred user! 2003-06-18 #2 form.width := screen.width; form.height := screen.height;
H HunterTeam Unregistered / Unconfirmed GUEST, unregistred user! 2003-06-18 #3 给你转贴一篇文章(楼上的只能实现宽度自适应,而字体大小比例却不能相应变化) DELPHI中自适应表单的实现 石家庄军械工程学院五系王俊 ---- 我 们 知 道, 屏 幕 分 辨 率 的 设 置 影 响 着 表 单 布 局, 假 设 你 的 机 器 上 屏 幕 分辨 率 是800*600, 而 最 终 要 分 发 应 用 的 机 器 分 辨 率 为640*480, 或1024*768, 这 样 你 原 先 设 计 的 表 单 在 新 机 器 上 势 必 会 走 样。 这 时 你 一 定 希 望 表 单 能 自 己 适 应 不 同 的 分 辨 率, 下 面 就 有 两 种 方 法 可 供 你 参 考。 ---- 一、 根 据 新 的 分 辨 率 自 动 重 画 表 单 及 控 件 ---- 先 在 表 单 单 元 的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 过 程 在 调 整 控 件 宽 度 和 高 度 的 同 时, 也 自 动 调 整 控 件 字 体 的 大 小, 以 适 应 新 的 分 辨 率, 但 美 中 不 足 的 是 它 并 不 改 变 控 件 的 顶 点 坐 标 位 置, 也 就 是 说, 该 过 程 不 改 变 控 件 之 间 的 相 对 位 置 关 系。 要 想 调 整 控 件 之 间 的 选 队 相 对 位 置, 还 需 要 自 己 编 程 实 现, 有 兴 趣 的 读 者 可 试 一 试。 ---- 二、 将 机 器 分 辨 率 更 改 为 设 计 时 的 分 辨 率 ---- 这 种 方 法 不 改 变 表 单 本 身, 而 是 将 屏 幕 分 辨 率 更 改 为 与 表 单 设 计 时 用 到 的 分 辨 率 相 同。 它 需 要 用 到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; ---- 以 上 两 种 方 法 在WINDOWS 95+DELPHI 3.0 环 境 下 均 已 通 过, 二 者 相 比, 前 者 是主 动 适 应, 后 者 则 是 被 动 适 应。
给你转贴一篇文章(楼上的只能实现宽度自适应,而字体大小比例却不能相应变化) DELPHI中自适应表单的实现 石家庄军械工程学院五系王俊 ---- 我 们 知 道, 屏 幕 分 辨 率 的 设 置 影 响 着 表 单 布 局, 假 设 你 的 机 器 上 屏 幕 分辨 率 是800*600, 而 最 终 要 分 发 应 用 的 机 器 分 辨 率 为640*480, 或1024*768, 这 样 你 原 先 设 计 的 表 单 在 新 机 器 上 势 必 会 走 样。 这 时 你 一 定 希 望 表 单 能 自 己 适 应 不 同 的 分 辨 率, 下 面 就 有 两 种 方 法 可 供 你 参 考。 ---- 一、 根 据 新 的 分 辨 率 自 动 重 画 表 单 及 控 件 ---- 先 在 表 单 单 元 的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 过 程 在 调 整 控 件 宽 度 和 高 度 的 同 时, 也 自 动 调 整 控 件 字 体 的 大 小, 以 适 应 新 的 分 辨 率, 但 美 中 不 足 的 是 它 并 不 改 变 控 件 的 顶 点 坐 标 位 置, 也 就 是 说, 该 过 程 不 改 变 控 件 之 间 的 相 对 位 置 关 系。 要 想 调 整 控 件 之 间 的 选 队 相 对 位 置, 还 需 要 自 己 编 程 实 现, 有 兴 趣 的 读 者 可 试 一 试。 ---- 二、 将 机 器 分 辨 率 更 改 为 设 计 时 的 分 辨 率 ---- 这 种 方 法 不 改 变 表 单 本 身, 而 是 将 屏 幕 分 辨 率 更 改 为 与 表 单 设 计 时 用 到 的 分 辨 率 相 同。 它 需 要 用 到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; ---- 以 上 两 种 方 法 在WINDOWS 95+DELPHI 3.0 环 境 下 均 已 通 过, 二 者 相 比, 前 者 是主 动 适 应, 后 者 则 是 被 动 适 应。
A Aiirii Unregistered / Unconfirmed GUEST, unregistred user! 2003-06-18 #4 有一个控件可以做到,其实,原理,我想也不是很难,就是遍历每个窗口的可视控件,然后,根据比例设定该控件的top,left,height,width.
魔 魔鬼大师 Unregistered / Unconfirmed GUEST, unregistred user! 2003-06-18 #6 有个控件advancepanel,把这个控件放在窗口上 再设置当前窗口和控件的相关属性(相信你知道的) 这样一来就可以了