Office中国论坛/Access中国论坛

标题: [分享]根据屏幕分辨率自动调整窗体大小以及让控件自适应屏幕分辨率 [打印本页]

作者: eyewitnes    时间: 2007-6-9 19:31
标题: [分享]根据屏幕分辨率自动调整窗体大小以及让控件自适应屏幕分辨率
根据屏幕分辨率自动调整窗体大小


Option Compare Database


Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long


Private Const SM_CXSCREEN = 0


Private Const SM_CYSCREEN = 1








Private Sub Form_Open(Cancel As Integer)


Dim x As Long, y As Long, a As Long, b As Long


x = GetSystemMetrics(SM_CXSCREEN)


y = GetSystemMetrics(SM_CYSCREEN)


a = 10000 / 800 * x


b = 7000 / 600 * y


DoCmd.MoveSize 1134, 1134, a, b


End Sub


获得系统的屏幕区域大小


Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Private Const SM_CXSCREEN = 0
Private Const SM_CYSCREEN = 1


Private Sub Command0_Click()
Dim x As Long, y As Long
x = GetSystemMetrics(SM_CXSCREEN)
y = GetSystemMetrics(SM_CYSCREEN)
MsgBox x & "  " & y
End Sub





让控件自适应屏幕分辨率2
来源:ACCESS爱好者


'这个函数可以使你开发的程序适应各种分辨率,这是我见过的最完美的解决方案!强列推荐


''如果你是在1024*768的分辨率下写的程序,就把下面那句改为
Const DesignSize = 1024,如果是800*600分
'辨率下写的,就改为Const DesignSize = 800
'用法:把下面所有的代码放在一个模块里,在需要适应分辨率的窗体的Load事
'件里加入Call FormResiz_OnOpen(Me)
'
'Const DesignSize = 1024
Const DesignSize = 800


'☆★☆★☆★☆★☆★☆★☆★☆★☆★


'API宣言
Declare Function GetDesktopWindow Lib "User32" () As Long


Declare Function GetWindowRect Lib "User32" (ByVal hWnd As Long, rectangle As RECT) As Long


'Type宣言
Type RECT


x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type


'国标码宣言
Dim frm As Form
Dim ctrl As Control
Dim prp As Property
Dim rat As Double
Dim flgSec
Dim X As Long
Dim WinHeight As Long
Dim hWnd As Long
Dim ret As Long
Dim i As Integer
Dim R As RECT
Dim SizeL As Long
Dim SizeT As Long
Dim SizeW As Long
Dim SizeH As Long


'--------------------------------------------------------------------------------


Public Function FormResiz_OnOpen(parFrm As Form, Optional perSizeL As Long, Optional perSizeT As Long, Optional perSizeW As Long, Optional perSizeH As Long)
On Error Resume Next
Set frm = parFrm
'窗口驾驶盘的取得
hWnd = GetDesktopWindow()
'现在分辨率取得
ret = GetWindowRect(hWnd, R)
'比例计算 常例:现在800 开发1024 800/1024 = 0.78加倍
X = (R.x2 - R.x1)
rat = X / DesignSize
SizeL = 0: SizeT = 0: SizeW = 0: SizeH = 0
If Not IsEmpty(perSizeL) = True Then
SizeL = perSizeL * rat
SizeT = perSizeT * rat
SizeW = perSizeW * rat
SizeH = perSizeH * rat
End If


'现在分辨率=开发分辨率如果终了
If X = DesignSize Then Exit Function
If X < DesignSize Then
'细小策划时、控制>部分>表单的次序
Call ChangeCtrl
Call ChengeSec
Call ChangeFrm
Else
'大掬取时、表单>部分>控制的次序
Call ChangeFrm
Call ChengeSec
Call ChangeCt
作者: wmok    时间: 2007-8-31 09:17
不行啊,第二种方法 提示ChangeCtrl未定义。。。。。

作者: fswxs    时间: 2007-8-31 09:23
楼主还是做个例子更能说明问题,比如原窗体设计不受任何影响的显示。
作者: tz-chf    时间: 2007-8-31 09:29
控件位置不变,光变窗体大小没什么用。
作者: goto2008    时间: 2007-8-31 09:42
楼主做个例子放上来吧....
作者: hi-wzj    时间: 2007-8-31 10:33
象很多游戏,它只是用api更改屏幕的分辨率为游戏所设定的分辨率,退出时还原回来就行了,这样代码就简单很多。
作者: goto2008    时间: 2007-8-31 11:34
原帖由 hi-wzj 于 2007-8-31 10:33 发表
象很多游戏,它只是用api更改屏幕的分辨率为游戏所设定的分辨率,退出时还原回来就行了,这样代码就简单很多。



我原先在1024*768分辨率下编的..有些窗体还采用最大化..

结果到了1280*800的分辨率就乱了套...

后来..我把窗体的属性设为...细边框.....不能最大化..才得算保持窗体原型.

大哥..说的,,,,感觉有点疑问......

把1280*800的分辨率改为1024*768......屏幕好像就不好看了...

会不会这样?........
作者: ccczzz    时间: 2007-8-31 12:49
原帖由 hi-wzj 于 2007-8-31 10:33 发表
象很多游戏,它只是用api更改屏幕的分辨率为游戏所设定的分辨率,退出时还原回来就行了,这样代码就简单很多。

这是一个最简单有效的方法,但是有一个不太友好的过程,对软件知识不多的人可能会吓一跳,屏幕突然改变了。我想能否这样做,在应用软件打开后,在不知不觉中改变了屏幕分辨率,在退出时也能在不知不觉中恢复原样。希望各位高手想想办法,在编程世界,听到过一句话:“只怕想不到,不怕做不到。”,静候佳音,谢谢。
作者: wmok    时间: 2007-8-31 17:12
顶一下,希望能够引起高手们的注意。。。。
这个问题,个人觉得相当重要。。。。。

作者: ccczzz    时间: 2007-9-1 12:59
这个问题,个人觉得相当重要,希望能够引起高手们的注意。。。。
作者: wmok    时间: 2007-9-5 09:12
严重关切。。。。
顶一下,呵。。。
作者: ccczzz    时间: 2007-9-5 12:36
严重关切。。。。
顶一下,呵。。。
作者: wmok    时间: 2007-9-5 12:59
用“分辨率”搜索一下论坛吧,有很多这方面的例子!
我已经找到我要的啦!
嘿。。。
作者: sbsfhgl    时间: 2008-6-15 22:16
项一下,希望有人知道
作者: tz-chf    时间: 2008-6-15 22:40
原帖由 hi-wzj 于 2007-8-31 10:33 发表
象很多游戏,它只是用api更改屏幕的分辨率为游戏所设定的分辨率,退出时还原回来就行了,这样代码就简单很多。


分辨率相差太多的话,屏幕会闪烁。而且有的笔记本不大支持改分辨率。我都按800*600做的。
作者: sbsfhgl    时间: 2008-6-15 22:55
如何改分辨率叱?
我在1024*768中做的,有的机子分辨率过高,我的窗口就显示特别别扭,我在论坛上找了,都说一大堆可就没有一个能适合我的?
作者: tz-chf    时间: 2008-6-15 23:43
窗体用对话框边框,不最大化。我不存在这个问题。
作者: stone0823    时间: 2008-6-15 23:53
以前用Delphi,系统提供这种功能。其实不仅仅是Form的大小,Form中的控件如果不相应改变,肯定会很难看。关注有何好方法
作者: sbsfhgl    时间: 2008-6-16 20:32
我已解决,把方法分享大家
http://www.accessbbs.cn/bbs/view ... ght=%B7%D6%2B%C2%CA
作者: apsfxc1    时间: 2008-8-13 09:27
关注中[:30]
作者: bpchan    时间: 2008-12-5 16:48
标题: 学习!!!
学习!!!
作者: 鱼儿游游    时间: 2009-4-7 23:48
静候佳音
作者: zzcjp    时间: 2009-7-13 10:12
请参考: http://www.office-cn.net/forum.p ... ;highlight=%2Bzzcjp
作者: leijiqiang    时间: 2009-7-29 17:57
好东西
作者: chaojianan    时间: 2009-10-17 16:20
谢谢代码分享。
作者: xxiaoxin321    时间: 2009-10-17 22:18
好东西!
作者: 灰太郎    时间: 2013-1-27 15:16
kkkkkkkkkkkkkkkkkk




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3