如何让VB界面适应不同的操作系统

ccbbcc 2018-11-22 10:20:54
我用VB写了一个界面,在我电脑上运行正常。
在别人电脑上运行有时显示不全,有时不能覆盖整个窗口。
请问高手,如何解决?谢谢!
...全文
608 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
大苟姬 2018-11-27
  • 打赏
  • 举报
回复
引用 15 楼 ccbbcc的回复:
那既然这样,那么一运行软件,就读取分辨率,根据分辨率调整界面布局也是可行的吧。 毕竟分辨率是有限的几种。
是这样子的,你可以根据每种分辨率去布局,但是想想台式机显示器,笔记本显示器,有很多不同的分辨率的。可以设定三种,大型,中型和小型,设计和测试布局。布局中尽量减少受分辨率影响的设计
脆皮大雪糕 2018-11-24
  • 打赏
  • 举报
回复
引用 12 楼 舉杯邀明月 的回复:
这些控件主要是“高度”不可随意设置, 控件宽度的限制相对较小。
列表控件的高度,主要因素是“行数、行高”,而“行高”是跟具体的字体、字号相关的。
下拉列表控件,其“高度”基本上就是“字体、字号”决定了(因为控件本身就是“1行”)。

我本意并不是说要否定你的“按比例缩放”的代码。
  在对“比例”要求不是很高的时候,也可以凑合着用。
我只是想说一下,这些控件,有可能你按“比例”计算出来的高度值、设置到控件上;
 但控件的“实际结果高度”有可能跟你的设置值“相差一大截”。 

当出现这种情况的时候,“缩放”结果就会很丑 。


listbox 高度问题,其实你拿代码测试一下就知道了,其实基本上你看不出太大差别。发出来的这段是我们2000年~2006年用的代码,顶多是控件底部对齐差那么半个字符高度。不是强迫症不会介意。甚至不直接指出来别人都不会察觉。
做这种自动缩放,设计的时候是做小界面,适应大分辨率的时候拉伸开来,误差相比于缩小的界面小很多。反正我们一个94年用到06年的产品,经历了主流显示设备从800*600过渡到1024*768的过程。500多个界面全部自动拉伸,各种意见都是提后台业务逻的事情,没人介意过界面。后来我们得知真有人特么用640*480的屏幕跑我们的程序,他也用得好好的。当主流显示器变成16:9的时候我们换B/S了,然后一帮甲方的人终于有理由打报告换设备了。目前我们的产品,对于部分岗位的特殊操作,要求高分屏,那几个界面专门为特定分辨率优化。
其实到了B/S,按比例缩放这件事情还用得更多了,只不过是HTML和浏览器自己搞定不需要前端程序员费太大周折。
当然,我说的这个产品是行业应用,全国能看到这个界面的不超过10000个专业岗位的人员。这些人根本不关注界面美观,他们要的是功能。曾经有操作人员提出过界面美化换肤需求,被甲方自己骂回去的。面向普通大众用户的产品不能用那么简单的办法糊弄,特别是女性用户,哎,都不知道他们在想啥

说了一大堆,界面的自适应方案好多,看做啥,谁用,多少人用,在哪用,怎么用。确认好场景用最低的成本最高的回报率和满意度实现它。任何华丽的表面背后都是一堆龌龊的实现,各种龌龊不能用统一的优雅方式解决。只能说挑一个最适合自己要做的东西的龌龊实现搞定它。
脆皮大雪糕 2018-11-23
  • 打赏
  • 举报
回复
引用 10 楼 舉杯邀明月 的回复:
有一些控件是不能“等比”缩放的,比如列表控件、下拉列表控件……
因此以“缩放”来适应不同的分辨率,并不能保证“都很美观”。

若是界面上这些“不能等比”的控件多了,你要想“效果很好”,累死你!


列表和下拉列表为啥不行?

其实界面的设计还和你的最终目标应用场景相关。
比如你的界面是准备放在自助设备,屏幕分辨率低但都是4:3屏幕。界面上大面积的图片,大面积按钮,字体粗大。那么全屏情况下800*600和1024*768 控件比例位置啥的都一样。再比如生产控制界面,本来就没有必要漂亮,按比例缩放完全能满足你的要求。

如果你的界面主要投放到16:9高分屏 甚至2K、4K屏幕,那么显示的精度会很高,这时候就不适合按比例缩放,而应该是先设计部分固定的“dock”空间,界面缩放的时候,这些空间固定占用一定区域,剩下的主显示区域再根据窗体大小减去这些固定区域以后再进行计算。
如果你要做一个像VS.NET、PS那样的复杂界面,你还要考虑让用户自己定义界面元素的组合,由用户自己决定界面元素的摆放伸缩。

总之,啥事不能一概而论,应该看楼主具体的应用场景(虽然他自己也没明确说)。给段代码,能用用,不能用看看能不能有所启发。
X-i-n 2018-11-23
  • 打赏
  • 举报
回复
是的,自适应基本上都是主动去适应屏幕,而不是让屏幕适应自己,针对常见的分辨率进行兼容,或者在一个分辨率范围内进行自适应。具体做法可以参考网页,同一个页面,无法做到在不同分辨率下的显示效果完全一样,但是可以做到兼容不同分辨率,都能正常显示。
ccbbcc 2018-11-23
  • 打赏
  • 举报
回复
那既然这样,那么一运行软件,就读取分辨率,根据分辨率调整界面布局也是可行的吧。 毕竟分辨率是有限的几种。
X-i-n 2018-11-23
  • 打赏
  • 举报
回复
配置不需要一样。操作系统、分辨率、DPI 如果一样,显示效果也会一样。 操作系统如果不一样,可能会有细微差别
ccbbcc 2018-11-23
  • 打赏
  • 举报
回复
谢谢各位!我还有一个问题。 如果两台电脑,配置不一样,分辨率一样。那能不能保证界面显示的一样啊?
舉杯邀明月 2018-11-23
  • 打赏
  • 举报
回复
引用 11 楼 脆皮大雪糕 的回复:
[quote=引用 10 楼 舉杯邀明月 的回复:]
有一些控件是不能“等比”缩放的,比如列表控件、下拉列表控件……
因此以“缩放”来适应不同的分辨率,并不能保证“都很美观”。

若是界面上这些“不能等比”的控件多了,你要想“效果很好”,累死你!


列表和下拉列表为啥不行?

 ………………
[/quote]

这些控件主要是“高度”不可随意设置, 控件宽度的限制相对较小。
列表控件的高度,主要因素是“行数、行高”,而“行高”是跟具体的字体、字号相关的。
下拉列表控件,其“高度”基本上就是“字体、字号”决定了(因为控件本身就是“1行”)。

我本意并不是说要否定你的“按比例缩放”的代码。
  在对“比例”要求不是很高的时候,也可以凑合着用。
我只是想说一下,这些控件,有可能你按“比例”计算出来的高度值、设置到控件上;
 但控件的“实际结果高度”有可能跟你的设置值“相差一大截”。 

当出现这种情况的时候,“缩放”结果就会很丑 。
X-i-n 2018-11-22
  • 打赏
  • 举报
回复
行不通,每台显示器都有一个自己的“最佳分辨率”,比如17' crt是1024 * 768,22' 16:10宽屏是1680*1050,22'普通是1920*1080……一旦显示器被设置了非最佳分辨率,所有显示效果都会被强制拉伸变形。你可以把你的显示器手动设置一个其它分辨率试试看。
ccbbcc 2018-11-22
  • 打赏
  • 举报
回复
谢谢!能不能那样呢?显示窗体之前,读取显示器的分辨率,保存起来。
然后改变屏幕的分辨率,可以正常显示。
退出后,再恢复显示器的分辨率。
X-i-n 2018-11-22
  • 打赏
  • 举报
回复
常用分辨率挨个测测。控件尺寸问题不大,可以根据窗体尺寸按比例缩放,麻烦的是字体。
ccbbcc 2018-11-22
  • 打赏
  • 举报
回复
如果屏幕分辨率不一样,而且显示也不一样,那怎么办呢?
X-i-n 2018-11-22
  • 打赏
  • 举报
回复
和操作系统关系倒不是很大了,你的这个现象和分辨率、DPI关系更大一点。没有什么好的办法,只能在常用分辨率下分别测试。
舉杯邀明月 2018-11-22
  • 打赏
  • 举报
回复
有一些控件是不能“等比”缩放的,比如列表控件、下拉列表控件……
因此以“缩放”来适应不同的分辨率,并不能保证“都很美观”。

若是界面上这些“不能等比”的控件多了,你要想“效果很好”,累死你!
脆皮大雪糕 2018-11-22
  • 打赏
  • 举报
回复
给你一段代码做参考。
新建一个窗体,把下面的代码拷贝到窗体里面。
接下来在界面设计模式下面进行界面编辑。
运行起来以后,不论窗体的尺寸如何改变,窗体上所有控件按设计时的比例进行缩放和。基本控件(textbox、label、combox等)以及带有fontsize属性的控件的字体大小也相应的调整。


Option Explicit
Private Type TControlInfo
ctrl As Control
Left As Single
Top As Single
Width As Single
Height As Single
FontSize As Single
End Type
Private mlngW As Long
Private mlngh As Long
Dim SaveCtrl() As TControlInfo

Private Sub Form_Initialize()
On Error Resume Next
mlngW = Me.Width
mlngh = Me.Height
'保存控件的状态
ReDim SaveCtrl(Me.Controls.Count - 1) As TControlInfo
Dim i As Integer
Dim ctrl As Control
For i = 0 To Me.Controls.Count - 1
Set ctrl = Me.Controls(i)
With SaveCtrl(i)
Set .ctrl = ctrl
.Left = ctrl.Left
.Top = ctrl.Top
.Width = ctrl.Width
.Height = ctrl.Height
.FontSize = ctrl.Font.Size
End With
Next
End Sub

Private Sub Form_Resize()
On Error Resume Next
Dim lngW As Long
Dim lngh As Long
Dim lngf As Single
Dim i As Integer

lngW = Me.Width
lngh = Me.Height

If (lngW / mlngW) < (lngh / mlngh) Then
lngf = (lngW / mlngW)
Else
lngf = (lngh / mlngh)
End If


For i = 0 To UBound(SaveCtrl)
With SaveCtrl(i)

If .ctrl.Left < 0 Then
.ctrl.Left = ((.ctrl.Left + 75000) * (lngW / mlngW)) - 75000
ElseIf .Left < 0 Then
.ctrl.Left = (.Left + 75000) * (lngW / mlngW)
Else
.ctrl.Left = .Left * (lngW / mlngW)
End If
.ctrl.Top = .Top * (lngh / mlngh)
.ctrl.Width = .Width * (lngW / mlngW)
.ctrl.Height = .Height * (lngh / mlngh)
'控件字体自适应大小
If .FontSize > 0 Then
If (.FontSize * lngf) < 8 Then
If (.FontSize * lngf) > 7 Then
.ctrl.Font.Size = 7
Else
.ctrl.Font.Size = .FontSize * lngf
End If
Else
.ctrl.Font.Size = .FontSize * lngf
End If
End If
End With
Next
End Sub
笨狗先飞 2018-11-22
  • 打赏
  • 举报
回复
还有就是弄个滚动条,或者整个界面弄在一个frame或者picture上,然后弄成在窗口内可拖动的,显示不够了自己拖过来。
笨狗先飞 2018-11-22
  • 打赏
  • 举报
回复
办法有,画嘛,所有的控件都自己画,只是工期就长了。
ccbbcc 2018-11-22
  • 打赏
  • 举报
回复
照你这么说,就没有一个办法在一个程序里统一起来了?
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

7,763

社区成员

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

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