用VB在分辨率1024*768下编写的程序,怎样编程才能适应不同的分辨率下的要求!

tjlth 2000-03-17 09:03:00
...全文
542 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
always 2000-04-17
  • 打赏
  • 举报
回复
用用这个函数:
Sub autochange(formi As Form)
Dim ratex As Double, ratey As Double
Dim acontrol As Control
ratex = Screen.Width * 1# / 15360 '我做当前工程时屏幕的大小(1024分辨率)
ratey = Screen.Height * 1# / 11520
formi.WindowState = 2 '最大化时,其它可参考相应改动
For Each acontrol In formi.Controls
If Not (TypeOf acontrol Is Timer) And Not (TypeOf acontrol Is Menu) And _
Not (TypeOf acontrol Is CommonDialog) Then
acontrol.Width = acontrol.Width * ratex
If Not (TypeOf acontrol Is ComboBox) Then acontrol.Height = acontrol.Height * ratey
acontrol.Left = acontrol.Left * ratex
acontrol.Top = acontrol.Top * ratey
acontrol.Move acontrol.Left, acontrol.Top
End If
Next
End Sub
记得给分哦。
major2 2000-04-17
  • 打赏
  • 举报
回复
foxyhunter的办法最好,在你的程序一开始处先判断计算机当前分辨率是否为1024*768,如果是,则继续运行,如果不是,则先把当前的分辨率保存下来,然后再用foxyhunter告诉你的那个API函数把当前分辨率调整为1024*768。注意,不要改变颜色数,因为如果颜色数改变会要求重新启动计算机的。在你的程序结束时再用这个函数把分辨率设置回来就可以了。好多游戏在一开始的时候计算机屏幕会黑一下就是因为它在调整屏幕分辨率。
foxyhunter 2000-03-21
  • 打赏
  • 举报
回复
首先在程序启动时需要记录下当前的屏幕分辨率
: Screen.Width/15 --->分辨率的宽度
: Screen.Heitht/15 ---->分辨率的高度
下面是改变分辨率的方法,我已经试过了,调用API函数ChangeDisplaySettings
下面是在模块中的声明

Attribute VB_Name = "ModuleDisplay"
Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32

Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Long
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As DEEVMODE, lpString2 As DEVMODE) As Long
Public Declare Function ChangeDisplaySettings Lib "User32" Alias "ChangeDisplaySSettingsA" (ByVal lpDevMode As Long, ByVal dwflags As Long) As Long

Public Function SetDisplayMode(Width As Integer, Height As Integer, Color As Intteger) As Long
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_BITSPERPEL = &H40000
Dim pDevmode As Long
Dim NewDevMode As DEVMODE
With NewDevMode
.dmSize = 122
If Color = -1 Then
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
Else
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
End If
.dmPelsWidth = Width
.dmPelsHeight = Height
If Color <> -1 Then
.dmBitsPerPel = Color
End If
End With
pDevmode = lstrcpy(NewDevMode, NewDevMode)
SetDisplayMode = ChangeDisplaySettings(pDevmode, 0)


End Function

在Form中输入如下代码

Dim i as Long
i=SetDisplayMode(640,480,16)
将分辨率改成640*480,16色

当然别忘记在退出程序时,改回原来的分辨率
always 2000-03-20
  • 打赏
  • 举报
回复
在某一分辨率做好程序,用Screen.Width \ Screen.TwipsPerPixelX 和 Screen.Height \ Screen.TwipsPerPixelY得到屏幕大小及分辨率作为常数,运行时再用Screen.Width \ Screen.TwipsPerPixelX 和 Screen.Height \ Screen.TwipsPerPixelY得到得到当时的屏幕大小及分辨率,然后你在依据分辨率的不同
去调整窗体或者控件.使用form的controls属性,它代表控件集,用for each ycontrol in (fomr.controls)循环对所有控件操作,注意用typeof ycontrol去判断控件的类型,因为menu,list,等 控件是不能改变位置和大小的。
killerl 2000-03-19
  • 打赏
  • 举报
回复
用Screen.TwipsPerPixelX,Screen.TwipsPerPixelY 得到屏幕大小,再用一定的比例关系来调节屏幕的其它控件!我看好多书都是这么做的!
apollo 2000-03-19
  • 打赏
  • 举报
回复
程序运行前先得到屏幕大小,再调节控件。
或者在编程序时使用内部单位缇
Un1 2000-03-19
  • 打赏
  • 举报
回复
使用Screen.TwipsPerPixelX和Screen.TwipsPerPixelY变量辅助调整大小和位置。
david 2000-03-18
  • 打赏
  • 举报
回复
可以参考近期的杂志<电脑编程技巧与维护>,上面有相关文章.
bjseaman 2000-03-18
  • 打赏
  • 举报
回复
可以先用Screen.Width \ Screen.TwipsPerPixelX 和 Screen.Height \ Screen.TwipsPerPixelY得到屏幕的分辨率,然后你在依据分辨率的不同
去调整窗体或者控件。
Firing_Sky 2000-03-17
  • 打赏
  • 举报
回复
???
在1024*768的分辨率下编程有什么特别的困难吗?
适应不同的分辨率的程序,在Form.Load事件里对Form的Top,Left和窗体上控件的Top,Left进行调整,不过我还记得有一个ActiveX控件,不用写代码就能轻松搞定
King 2000-03-17
  • 打赏
  • 举报
回复
得看阁下编什么软件了,如果是游戏的话,可以参考《侍魂》,用DIRECTX的XMODE作为全屏,用320乘200的窗体作为标准,并可以自由调节大小。如果是WINDOWS的窗体程序,大可以先取得监视器的分辨率,再慢慢调节控件的位置。
说 明: 〖accResize1.0〗

这是针对access97所做的自动调整窗体和控件大小的控件,使你的窗口在缩放的时候各控件位置和大小会自动调整。这样你的程序即可在640*480分辨率下运行,也可在800*600下运行,而且在任何大小情况下,窗体里的控件都会随着窗体的大小而变化,保证你可以看到整个窗体的所有内容。只要改变窗体的大小,包括标签、文本框、下拉框、列表框、选项框、检查框、图片、普通子窗体、数据子窗体等控件都会自动按相应的比例实时改变大小。
写这个控件的初衷主要是以前在开发VB程序时用到resize的控件,觉得比较好用,而当时找遍所有的资料,都找不到类似针对ACCESS的控件(VB的RESIZE控件在ACCESS中会出现一些奇怪的现象,主要是因为ACCESS窗体的特别结构),而当时我开发的一个项目需要同时适应800*600 和640*480 两种分辨率,所以触发我自己写这方面的程序。经过几次比较大的改动,现在大致可以满足我的需要。一年后,我在网络上找到Ken Getz, Paul Litwin, and Mike Gilbert写的Scale and Resize Your Access Forms演示程序,知道原来在这个世界,还有人与我有同样的想法,他们的功能做得挺棒,只可惜看不到他们的源码。不过知道他们是用API来做的。我比较了两者之间的速度,应该是差不多的。为了让大家了解,我迟点会把他们的演示程序上传。




〖accResize1.0〗说明文件


一、【主要功能】
实现窗口在缩放的时候各控件位置和大小自动调整功能
二、文件列表

resize.mde 控件缩放的核心代码
testresize.mdb 测试缩放效果的例子程序

三、〖accResize1.0〗使用方法

1. 确保你已经安装了access97
2. 将下载的文件用WINRAR解压后放在同一个目录
3. 用ACCESS打开(或双击)testresize.mdb,运行其中的窗体文件即可
4. 如果你想在你的程序中使用这个功能,只要把resize.mde抄到你的程序目录下,然后打开你的程序,在工具菜单中选择[引用],引用resize.mde即可(你需进入代码状态才能看到工具菜单中的引用子菜单),最后在你自己程序的窗体中的resize事件中加入 resize.Form_myResize Me 这句程序即可。

5. 请注意,为了加快窗体缩放的速度,所以程序有个特别注意的地方: 当你在窗体中添加新的控件或改变了位置,需在重新关闭你的程序(即关闭MDB后)再打开才能生效。
实际我试过,即使增加新的控件就自动更新,速度亦差不多


四、错误反馈

1. 如果你发现软件中的错误,欢迎你反馈给作者。


五、【使用许可/LICENSE】

请仔细阅读以下使用许可,如果您不同意以下任何一点,请
立即停止使用此软件。

1.〖accResize1.0〗的作者王宇虹授予您对此版本的最终用户使用
许可权;
2.您不能对软件作任何的软件反向工程,如反汇编,跟踪等;
3.您可以分发此软件,但不能收取任何费用或用于商业目的,
同时,必须保证所分发的软件包含全部文件,并且不作任何
修改;分发的软件应该至少包括我软件所附带的README.txt
4.本软件不包含任何使用保证,不能保证适用或不出故障,由
于此软件是免费提供,因此作者不对您或别的用户使用此
软件所带来的理论上或实际的损失负责;
5.如果您用了此软件就等于您同意以上几点许可;
6.如果你觉的该软件好用,请发一封Email给作者表示感谢,这些支持将会使作者
写出更好软件,谢谢!

六、【软件注册费用】
完全免费!!
本软件所有功能都可以免费使用,完全没有限制。

七、【源码费用】

如果你对此软件的源码感兴趣,你可以向作者免费索取。
你只要发封EMAIL给作者,说明你需要索取这个程序的源码,作者即会把源码EMAIL给你。
电子信箱:wang_yu_hong@163.net
tmtony@21cn.com


你可以到我的主页
http://www.zstmcomputer.com
或 http://tmcomputer.6to23.com

免费获得其它完整的应用软件或一些已公开的源码。



八、【主要技术】
具体请参照程序


系统编写开始时间: 12/03/2001
完成及验收时间: 18/04/2001

九、【感谢】
此软件的诞生得到了同事以及客户的支持和测试,在此表示感谢。
 
这是针对access2000所做的自动调整窗体和控件大小的控件,使你的窗口在缩放的时候各控件位置和大小会自动调整。这样你的程序即可在640*480分辨率下运行,也可在800*600下运行,而且在任何大小情况下,窗体里的控件都会随着窗体的大小而变化,保证你可以看到整个窗体的所有内容。只要改变窗体的大小,包括标签、文本框、下拉框、列表框、选项框、检查框、图片、普通子窗体、数据子窗体等控件都会自动按相应的比例实时改变大小。写这个控件的初衷主要是以前在开发VB程序时用到resize的控件,觉得比较好用,而当时找遍所有的资料,都找不到类似针对ACCESS的控件(VB的RESIZE控件在ACCESS中会出现一些奇怪的现象,主要是因为ACCESS窗体的特别结构),而当时我开发的一个项目需要同时适应800*600 和640*480 两种分辨率,所以触发我自己写这方面的程序。经过几次比较大的改动,现在大致可以满足我的需要。一年后,我在网络上找到Ken Getz, Paul Litwin, and Mike Gilbert写的Scale and Resize Your Access Forms演示程序,知道原来在这个世界,还有人与我有同样的想法,他们的功能做得挺棒,只可惜看不到他们的源码。不过知道他们是用API来做的。我比较了两者之间的速度,应该是差不多的。为了让大家了解,我迟点会把他们的演示程序上传。〖accResize1.0〗说明文件一、【主要功能】实现窗口在缩放的时候各控件位置和大小自动调整功能二、文件列表resize.mde 控件缩放的核心代码testresize.mdb 测试缩放效果的例子程序三、〖accResize1.0〗使用方法1. 确保你已经安装了access20002. 将下载的文件用WINRAR解压后放在同一个目录3. 用ACCESS打开(或双击)testresize.mdb,运行其中的窗体文件即可4. 如果你想在你的程序中使用这个功能,只要把resize.mde抄到你的程序目录下,然后打开你的程序,在工具菜单中选择[引用],引用resize.mde即可(你需进入代码状态才能看到工具菜单中的引用子菜单),最后在你自己程序的窗体中的resize事件中加入 resize.Form_myResize Me 这句程序即可。5. 请注意,为了加快窗体缩放的速度,所以程序有个特别注意的地方: 当你在窗体中添加新的控件或改变了位置,需在重新关闭你的程序(即关闭MDB后)再打开才能生效。实际我试过,即使增加新的控件就自动更新,速度亦差不多四、错误反馈1. 如果你发现软件中的错误,欢迎你反馈给作者。五、【使用许可/LICENSE】请仔细阅读以下使用许可,如果您不同意以下任何一点,请立即停止使用此软件。1.〖accResize1.0〗的作者王宇虹授予您对此版本的最终用户使用许可权;2.您不能对软件作任何的软件反向工程,如反汇编,跟踪等;3.您可以分发此软件,但不能收取任何费用或用于商业目的,同时,必须保证所分发的软件包含全部文件,并且不作任何修改;分发的软件应该至少包括我软件所附带的README.txt4.本软件不包含任何使用保证,不能保证适用或不出故障,由于此软件是免费提供,因此作者不对您或别的用户使用此软件所带来的理论上或实际的损失负责;5.如果您用了此软件就等于您同意以上几点许可;6.如果你觉的该软件好用,请发一封Email给作者表示感谢,这些支持将会使作者写出更好软件,谢谢!六、【软件注册费用】完全免费!!本软件所有功能都可以免费使用,完全没有限制。七、【源码费用】如果你对此软件的源码感兴趣,你可以向作者免费索取。你只要发封EMAIL给作者,说明你需要索取这个程序的源码,作者即会把源码EMAIL给你。电子信箱:wang_yu_hong@163.net tmtony@21cn.com你可以到我的主页http://www.zstmcomputer.com 或 http://tmcomputer.6to23.com 免费获得其它完整的应用软件或一些已公开的源码。八、【主要技术】具体请参照

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧