如何在分辨率变化时,程序界面大小也随之变化,使之完全适应屏幕的大小?(50分)

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

leonada

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在分辨率变化时,程序界面大小也随之变化,使之完全适应屏幕的大小?
 
以下是我的一个例子:

unit ScreenUnit;

interface

uses Windows;

var sx,sy:WORD;
function DynamicResolution(X, Y: word): BOOLEAN;

implementation

function DynamicResolution(X, Y: word): BOOLEAN;
var
lpDevMode: TDeviceMode;
begin
Result := EnumDisplaySettings(nil, 0, lpDevMode);
if Result then
begin
lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
sx:=lpDevMode.dmPelsWidth;
sy:=lpDevMode.dmPelsHeight;
lpDevMode.dmPelsWidth := X;
lpDevMode.dmPelsHeight := Y;
Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
end;
end;

end.
 
人家问的是如何让自己的程序得到系统分辨率改变的通知,而不是
如何改变系统分辨率。

要得到通知,只需相应这个消息:WM_DISPLAYCHANGE
其中,参数意义是:
wParam New bits per pixel
LOWORD(lParam) New pixel width
HIWORD(lParam) New pixel height


 
简单的方法可以设置控件的Anchors属性,让其向你指定的方向扩展
 
当屏幕的分辩率改变时,取屏幕的大小然后取其比例(比如1:2)对
窗口进行设置就行了。。这个问题好象太简单了吧??
 
to 淡淡的笑
窗体改变后窗体里面的控件怎么办?,好像要失去设计期的比例。
 
对里面的控件也按比例设计啊
 
>对里面的控件也按比例设计啊
不是全部都能行的吧。
 
挺麻烦的,得把控件大小,字体大小等都按比例缩放
 
这个问题不难,就是繁。
Tform1.OnCreate(...)
begin
if screen.width=640 then //640X480
begin
//改变窗口和控件的大小;
...
end
else if Screen.width=800 then //800X600
begin
....
end
else if Screen.width=1024 then //1024X768
begin
...
end
...
end;
 
有没有现成的控件可以使用?
 
case screen.width of

640 : begin
r:=600 div 600 ; //r为一个比例因子
end;

800 : begin
r:=800 div 600 ;
end;

1024 : begin
r:=1024 div 600 ;
end;

...

end;
form1.width:=screen.width;
控件1.width:=控件1.width*r ;
控件1.height:=控件1.height*r ;
控件1.left:=控件1.left*r
控件1.Top:=控件1.Top*r
控件2.width:=控件1.width*r ;
控件2.height:=控件2.height*r ;
.....
//还有字体


你杀了我吧!
 
就是费点劲!
 
时间太久,强制结束。 wjiachun
 
后退
顶部