像的平铺显示;按下按钮5退出程序。以上方法及
程序在Windows95、Delphi2.0环境下调试通过。
----编者注:本文源
程序代码发表在本报WWW站点上,地址是:http://www.computerworld.com.cn/98/skill/default.htm。欢迎访问!
用VB5设计适应性界面
北京1840信箱计算中心(102205)--杨春生
--------------------------------------------------------------------------------
----在设计应用软件时,设计者总希望设计的软件,无论显示器分辨率设置是640×480、800×600还是1024×768,无论显示器设置是在大字体还是在小字体,都能正常运行,且具有美观一致的界面。本文介绍笔者解决这些
问题的方法,供参阅。
使界面居中
----为了使界面元素能在各种显示分辨率下均有合理的布局,可以采用两种方法。一种是获取当前显示分辨率,并根据这一分辨率计算界面各元素的位置和大小来进行设置。这种方法虽然能解决界面元素布局问题,但需要知道每个元素的位置和大小,
程序烦琐。另一种方法是先设计一个具有极大化、无边界、无标题、无控制盒的窗体,然后在其上放置一个容器控件Picture,在Picture中再放置其他控件。在窗体Load事件中根据当前的显示分辨率居中Picture,从而实现了居中整个界面。具体代码如下:
Private Sub Form_Load()
Call CenterControl(Picture1)
End Sub
Public Sub CenterControl(obj As Object)
Dim cx, cy As Single
cx =(Screen.Width/Screen.TwipsPerPixelX -obj.Width)/2 #
cy =(Screen.Height/Screen.TwipsPerPixelY -obj.Height)/2 #
obj.Left = cx
obj.Top = cy
End Sub
使界面适应大字体与小字体
----Win95在创建控件时,根据当前显示属性为大字体或小字体来作相应调整。尽管应用程序传送的参数(控件位置和尺寸)是一致的,但实际控件的位置和尺寸在这两种情形下并不一样。如果应用程序仅仅考虑一般小字体的情况,在大字体下界面则十分难看混乱,甚至无法操作。为解决这一问题,可通过系统
注册表来了解当前显示器设置。下面的
程序采用了另一种方法:在一个映射模式为Pixel的窗体中放置一个控件,在显示属性为小字体的设计环境下首先看一下控件的初始位置x、y,然后在窗体的Load事件中计算出x和y方向的放大比例xFac、yFac:
Private Sub Form_Load()
xFac = 400 # / mmlhwnd.Left
yFac = 400 # / mmlhwnd.Top
End Sub
----其中:mm\hwnd为放置在窗体中的控件,初始坐标为400、400。
----最后在各个需要调整界面的窗体Load事件中调用下列子
程序,调整各控件的位置与大小:
Public Sub CorrectForm(fm As Form)
Dim C As Control
For Each C In fm.Controls
If TypeOf C Is Timer Then
ElseIf TypeOf C Is CommonDialog Then
ElseIf TypeOf C Is Line Then
C.X1 = C.X1 * xFac
C.Y1=C.Y1 *yFac
C.X2=C.X2 *xFac
C.Y2=C.Y2 *yFac
Else
C.Left=C.Left *xFac
C.Top=C.Top *yFac
If TypeOf C Is SSCommand Then
C.Width=C.Width *xFac
C.Height=C.Height *yFac
C.FontSize=C.FontSize *xFac
ElseIf TypeOf CIsCommandButtonThen
C.Width=C.Width *xFac
C.Height=C.Height *yFac
C.FontSize=C.FontSize *xFac
ElseIf TypeOf C Is ListBox Then
C.Width=C.Width *xFac
C.Height=C.Height *yFac
C.FontSize=C.FontSize *xFac
ElseIf TypeOf CIsComboBox Then
C.Width=C.Width *xFac
C.FontSize=C.FontSize *xFac
End If
End If
Next C
End Sub
----上述程序中仅列举了几个典型的控件,如果窗