一直以来 我都没有找到很好的使应用程序适应不同分辨率的方法,各位江湖的老大们 可否教教小弟 ?
解决方案 »
- 如何在PNG图像上绘制文字
- 对文本文件中的数据进行重新排列
- 出错提问
- 求Inside深入核心—VCL架构剖析 电子书
- delphi中判断逻辑的写法.
- 在Delphi中单步调试怎么不能在鼠标位置显示变量的结果呀!真怀恋VB的单步调试啊!
- 不让程序关闭
- delphi(c++ builder)在证券、基金、投资等行业的应用(希望大家能补充其他的行业应用情况)
- 函数的调用
- DBChart 与 ScrollBar 配合的问题
- 请问各位,我在程序中OPEN一个TABLE控件之后,是否会把后台数据库对应的表给锁住,我想让我的程序同时在多个机器上运行?
- Delphi怎么样在一个Word文档中把一个已经存在的表格动态的复制多个(表格之间空一或两行)?
Anchors,都设置为True试试.
有时候,窗口变成满屏的,但是按钮啊什么的就移动位置了
不知道有没有更好的方法出现,期待中,关注中。
2、 设置 AutoScroll 为 False.
procedure TForm1.FormCreate(Sender: TObject);
var
ScreenWidth: LongInt = 800; {在分辨率为 800x600 的模式下编程.}
ScreenHeight: LongInt = 600;
begin
scaled := true;
if (screen.width <> ScreenWidth) then begin
//以下指form1的height & width
height:=longint(height)*longint(screen.height) DIV ScreenHeight;
width := longint(width) * longint(screen.width) DIV ScreenWidth;
scaleBy(screen.width, ScreenWidth);
end;
end;
Orignwidth=1024;
Orignheight=768;为自定义的屏幕分辨率的大小
在FormCreate中添加以下代码
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;
其他采用缩放的方法均都有缺陷……(主要还是适应后美观的问题)
个人感觉这个东西除非在考虑时就用相对的方法来定位(这需要做大量的工作),简单的方法似乎还是没有找到……
http://community.csdn.net/Expert/topic/3521/3521852.xml?temp=.5320551但是其中的刷新率设置,还没有测试成功。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function GetDisplayFrequency: Integer;//得到刷新率
var
DeviceMode: TDeviceMode;
begin
EnumDisplaySettings(nil, Cardinal(-1), DeviceMode);
Result := DeviceMode.dmDisplayFrequency;
end;procedure ChangeDisplayFrequency(iFrequency:Integer);//更改刷新率
var
DeviceMode: TDeviceMode;
begin
EnumDisplaySettings(nil,Cardinal(-1), DeviceMode);
DeviceMode.dmDisplayFrequency:=Cardinal(iFrequency);
ChangeDisplaySettings(DeviceMode,CDS_UPDATEREGISTRY);
end;function Resolution(X,Y:word):boolean;
var
DevMode:TDeviceMode;
begin
Result:=EnumDisplaySettings(nil,0,DevMode);
if Result then
begin
DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT;
DevMode.dmPelsWidth:=X;
DevMode.dmPelsHeight:=Y;
Result:=ChangeDisplaySettings(DevMode,0)=DISP_CHANGE_SUCCESSFUL;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Resolution(800,600) then ShowMessage('800×600模式!');
ChangeDisplayFrequency(85);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
if Resolution(1280,1024) then ShowMessage('1280X1024模式!');
end;procedure TForm1.Button3Click(Sender: TObject);
begin
if Resolution(1024,768) then ShowMessage('1024X768模式!');
end;procedure TForm1.Button4Click(Sender: TObject);
begin
ShowMessage(IntToStr(GetDisplayFrequency));
ChangeDisplayFrequency(85);
end;procedure TForm1.Button6Click(Sender: TObject);
begin
ShowMessage(IntToStr(GetDisplayFrequency));
ChangeDisplayFrequency(75);
end;procedure TForm1.Button5Click(Sender: TObject);
begin
ShowMessage(IntToStr(GetDisplayFrequency));
ChangeDisplayFrequency(60);
end;end.