请问怎么编写程序控制界面在不同的分辨率下保持界面和字体不出现问题?(50分)

  • 主题发起人 主题发起人 学海小妹
  • 开始时间 开始时间

学海小妹

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎么编写程序控制界面在不同的分辨率下保持界面和字体不出现问题?
或者回答用ADO数据集怎么进行模糊过滤,比如我用ADODATASET这个数据集想进行模糊过滤
 
1、进入程序时,设置分辨率为所需分辨率,退出时,还原分辨率;
2、用一信息文件记录下在不同的分辨率下各窗体、控件的属性信息,进入程序时,
根据当前的分辨率设置各窗体、控件的属性信息;

过滤:可用SQL
 
给你个例子:
一般来说,在一种屏幕分辨率下设计的窗体换到另一种屏幕分辨率下去显示,
其大小会改变。要使窗体大小不依赖于屏幕分辨率,最简单的思路就是在运行
程序时将系统的屏幕分辨率设置为创建窗体时的屏幕分辨率,然后在退出程序时
再将屏幕分辨率恢复到初始值;还有一种思路是先比较两种分辨率大小,
再根据结果按比例扩大或缩小窗体。
这两种方法各有优缺点:前者会影响其他程序的显示,后者要做得完美就比较复杂,
需要修改窗体大小,各个控件的位置及字体大小等,但这可以通过技巧来完美地解决。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

const
ScreenHeight: integer = 800;
ScreenWidth: integer = 600;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
x, y: LongInt;
begin
form1.scaled := true;
//窗体可以缩放
x := getSystemMetrics(SM_CXSCREEN);
y := getSystemMetrics(SM_CYSCREEN);
//程序运行时获取目标机器的屏幕分辨率
if (x <> ScreenHeight) or (y <> ScreenWidth) then
//目标机器的屏幕分辨率与作者机器的屏幕分辨率不同
begin
form1.height:=form1.height*x DIV ScreenHeight;
form1.width:=form1.width*y DIV ScreenWidth;
scaleBy(x,ScreenHeight);
//调用窗体的scaleBy函数,将窗体大小变为初始大小的x/ ScreenHeight倍。
//这是本程序的关键技巧,同时缩放的包括窗体上各组件和字体。
end;
end;

end.

 
有这么复杂???[:D]
 
没有人回答,为什么给我减了50分?冤~~~~~~~~~~~~
网管呢?你怎么不看看哦:(
 
这个问题真的很难处理,见人见智吧~~~~~~~
尤其是MDI窗口。
 
给你的那个例子子怎么不行?我调好的,绝对正确!
 
这问题确实很讨厌[:(]
关注
 
呵呵,缩放有时字体会变得很难看~~~~~~~~
 
这个论坛本来就是提问后就直接减分的...
防止别人回答完了你又耍赖[:D]
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部