自适应分辨率

wangfeng0215 2004-04-14 11:18:08
如何自动适应计算机的显示模式,
提供1024X768和800X600两种分辨率自适应界面???
如何实现?????
...全文
127 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdqhlyf 2004-05-13
  • 打赏
  • 举报
回复
我也正在用这种方法!
jinjazz 2004-04-19
  • 打赏
  • 举报
回复
有问题!
我是在1024*768下画的界面!
你提供的方法不适用

-----------------我晕啊,哈弱,建议楼主不要糟蹋这玩意了
  • 打赏
  • 举报
回复
implementation
const
ScreenWidth: LongInt = 800; {I designed my form in 800x600 mode.}
ScreenHeight: LongInt = 600;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
scaled := true;
if (screen.width <> ScreenWidth) then

begin
height := longint(height) * longint(screen.height) DIV ScreenHeight;
width := longint(width) * longint(screen.width) DIV ScreenWidth;
scaleBy(screen.width, ScreenWidth);
end;
end;

下面是解决字体大小的代码:
USES typinfo; {Add this to your USES statement.}

var
i: integer;
begin
for i := componentCount - 1 downto 0 do
with components[i] do
begin
if GetPropInfo(ClassInfo, 'font') <> nil then
font.size := (NewFormWidth DIV OldFormWidth) * font.size;
end;
end;

下面的函数可以解决问题:
Form:需要调整的Form,OrgWidth:开发时屏幕的宽度,OrgHeight:开发时屏幕的高度。
注意:需要把Form的Scaled设置为True。
procedure AdjustForm(Form: TForm; const OrgWidth, OrgHeight: integer);
begin
with Form do
begin
Width := Width * Screen.Width div OrgWidth;
Height := Height * Screen.Height div OrgHeight;
ScaleBy(Screen.Width, OrgWidth);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
AdjustForm(Self,1280,1024);
end;
wangfeng0215 2004-04-19
  • 打赏
  • 举报
回复
没人会吗???
wangfeng0215 2004-04-15
  • 打赏
  • 举报
回复
我是在1024*768下设计的界面
我想让界面自动适应800*600的分辨率
delphi_xizhousheng 2004-04-14
  • 打赏
  • 举报
回复
有没有大富翁或者是葵花宝典之类的资料 里面说的很详细
wangfeng0215 2004-04-14
  • 打赏
  • 举报
回复
在窗体的OnResize事件中添加处理代码:
怎么写呀???
据个例子好吗
10975037 2004-04-14
  • 打赏
  • 举报
回复
1:利用组件的对齐属性;()
2:在窗体的OnResize事件中添加处理代码
menggirl 2004-04-14
  • 打赏
  • 举报
回复
一、 根 据 新 的 分 辨 率 自 动 重 画 表 单 及 控 件
先 在 表 单 单 元 的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;

iknowwn 2004-04-14
  • 打赏
  • 举报
回复
procedure TMain_f.FormCreate(Sender: TObject);
begin
if GetSystemMetrics(SM_CXSCREEN)>800 then
begin
main_f.WindowState:=wsMaximized;
end
else
begin
main_f.WindowState:=wsNormal;
width:=800;
height:=572;
top:=0;
left:=0;
end;
w1w2w3w4 2004-04-14
  • 打赏
  • 举报
回复
帮你找了一份:

Another_eYes (1998-11-22 22:39:29)
implementation
const
ScreenWidth: LongInt = 800; {I designed my form in 800x600 mode.}
ScreenHeight: LongInt = 600;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
scaled := true;
if (screen.width <> ScreenWidth) then

begin
height := longint(height) * longint(screen.height) DIV ScreenHeight;
width := longint(width) * longint(screen.width) DIV ScreenWidth;
scaleBy(screen.width, ScreenWidth);
end;
end;

下面是解决字体大小的代码:
USES typinfo; {Add this to your USES statement.}

var
i: integer;
begin
for i := componentCount - 1 downto 0 do
with components[i] do
begin
if GetPropInfo(ClassInfo, 'font') <> nil then
font.size := (NewFormWidth DIV OldFormWidth) * font.size;
end;
end;

下面的函数可以解决问题:
Form:需要调整的Form,OrgWidth:开发时屏幕的宽度,OrgHeight:开发时屏幕的高度。
注意:需要把Form的Scaled设置为True。
procedure AdjustForm(Form: TForm; const OrgWidth, OrgHeight: integer);
begin
with Form do
begin
Width := Width * Screen.Width div OrgWidth;
Height := Height * Screen.Height div OrgHeight;
ScaleBy(Screen.Width, OrgWidth);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
AdjustForm(Self,1280,1024);
end;
Tensionli 2004-04-14
  • 打赏
  • 举报
回复
学习
da_yu 2004-04-14
  • 打赏
  • 举报
回复
up
wangfeng0215 2004-04-14
  • 打赏
  • 举报
回复
有问题!
我是在1024*768下画的界面!
你提供的方法不适用

10975037 2004-04-14
  • 打赏
  • 举报
回复
procedure TForm1.FormResize(Sender: TObject);
begin
with Panel1 do
begin
Top:=0;
left:=0;
width:=Form1.ClientWidth;
height:=Form1.ClientHeight;
end;

end;
menggirl 2004-04-14
  • 打赏
  • 举报
回复
我上面的不可以?
wangfeng0215 2004-04-14
  • 打赏
  • 举报
回复
没有
发一段过来好吗

5,388

社区成员

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

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