delphi5中怎么让编好的程序自动适应不同的分辨率?(100分)

  • 主题发起人 主题发起人 lixyacn
  • 开始时间 开始时间
L

lixyacn

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi5中怎么让编好的程序自动适应不同的分辨率?
 
问题描述不全。
 
我也想知道
 
使用PerfectSize(使窗体及控件自动适应操作系统及分辩率) for d5
 
const
orignwidth=800; //
orignheight=600;
procedure TfmMain.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;
 
1.编好的程序?什么意思?需要用编程以外的手段解决?
2.自动适应不同的分辨率?什么意思?如何才叫适应?
 
To linsb: 哪里有 perfactsize,想试试。
 
还是让分辨率适应你的程序吧
 
楼上说的好有道理呀
真是有水平。
你是不是MM
 
这里是调整分辨率的源码和使用方法,看看对你有用没(delphi6)
function DynamicResolution(X, Y: word): BOOL;
var
lpDevMode: TDeviceMode;
begin
Result := EnumDisplaySettings(nil, 0, lpDevMode);
if Result then
begin
lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := X;
lpDevMode.dmPelsHeight := Y;
Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if DynamicResolution(640, 480) then
ShowMessage('Now is 640*480');

end;
 
楼上的楼上的楼上说的也有道理嘛,mm如何知道这些,只要自己的程序运行的时候不用其他的
程序就行,要不程序运行的时候先把所有的非系统进程统统杀死,然后把shell也kill了
不是就后顾无忧了么:)
楼主说的编好的程序的意思大概是不想改动程序的窗体布局了
 
书上有段这样的例程,可以改变分辨率,看看有没有用

procedure TForm1.FormCreate(Sender: TObject);
const
form_width=800;
form_height=600;
begin
//form1.Top:=int((600 - 350)/2) ;
//form1.left:=(800 - 500)/2 ;
changeflag:=false;
if(screen.width<>form_width)or(screen.height<>form_height) then
if enumdisplaysettings(nil,0,device_mode) then
begin
old_width:=getsystemmetrics(sm_cxscreen);
old_height:=getsystemmetrics(sm_cyscreen);
changeflag:=true;
device_mode.dmfields:=dm_pelswidth or dm_pelsheight ;
device_mode.dmpelswidth:=form_width;
device_mode.dmpelsheight:=form_height;
changedisplaysettings(device_mode,0);
showmessage('设置成功,设置为:'
+inttostr(form_width)+'*'+inttostr(form_height)
+';'+'原设置为:'
+inttostr(old_width)+'*'+inttostr(old_height));

end;
end;
 
把主Form得 WindowState 设置成 wsMaximized
 
转一帖:

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 环 境 下 均 已 通 过, 二 者 相 比, 前 者 是主 动 适 应, 后 者 则 是 被 动 适 应。
 
其实很简单
多用用panel
设置好你的ALIGN属性
我做了几年都是这样做的
 
目前,我主要按800*600模式来编程,想来现在还在600*480模式下
显示器应该不多了吧,至于1024*768,那当然更好。
其实,楼主的问题让人不好理解,真实意思是什么?如果仅仅说
Delphi编写的程序只是适应分辨率的不同,那答案很简单:Delphi
中有一段代码就是用来处理分辨率的,然后设置Screen的相关属性,
要不你去查看Delphi的有关源代码。
 
多人接受答案了。
 
很感谢大家帮我的忙,很长时间没来了,又遇到关于三层的问题,请大家帮忙
 
后退
顶部