我们正在尽快退出VB6,但与此同时我们已经开始从构建服务器上的命令行构建我们的VB6应用程序。
问题:构建服务器有一个基本的视频适配器,导致表单被截断为基本适配器的分辨率,而不是表单本身的高度和宽度。
我们发现的一种解决方法需要进入每个Form的Load Event并在Form Properties窗口中手动将Height和Width属性设置为观察到的大小。
唉..
此应用程序涉及许多表单,而更多应用程序涉及更多表单。我想构建一个脚本来处理这个问题。
两个问题:
1)在代码/项目/ etc中,我在“属性”窗口中找到窗体的高度和宽度?搜索* .frm文件并没有找到任何获胜者;也没有打开* .frx文件并将已知的高度或宽度转换为十六进制(然后搜索)。
2)除了编辑每个表格之外,我还能做些什么吗?
提前致谢。
乔恩
答案 0 :(得分:3)
FRM格式记录在VB6 manual中。它说高度和宽度都存储在Twips中,正如愤怒的吉姆观察到的那样。它没有解释ClientHeight和ClientWidth,但正如OneNerd和cmsjr所说,这是表单内部的大小(没有菜单栏和边框)。如果您有任何将StartupPosition设置为手动的表单,构建服务器也可能正在更改ClientLeft和ClientTop。
不要在运行时设置表单的高度和宽度。其中包括菜单栏和边框,它们在不同版本的Windows上具有不同的厚度或具有不同的主题。所以你会得到错误的尺寸。改为设置ScaleHeight和ScaleWidth,它们是表单内部的维度。 VB6运行时根据这些来计算适当的高度和宽度。
最后,只需购买新的构建服务器(或新的视频卡)。带领所有开发人员向老板挥手火炬和干草叉,或者只是冷静地解释PC成本与开发人员时间成本之间的差异。
答案 1 :(得分:2)
如果您在记事本或任何纯文本编辑器中打开.frm文件,表单大小将从顶部开始定义几行:
例如:
ClientHeight = 8445
ClientLeft = 60
ClientTop = 450
ClientWidth = 9960
我不确定你为什么遇到这个问题 - 看起来很奇怪 - 但是如果你的构建服务器引起了问题,那么我看到的唯一选择是(1)更改构建服务器(或者升级视频卡),或者如你所提到的那样在每个表单的load事件中写入代码,尽管如果你在IDE中设置了postion->中心,那么这可能会影响表单的居中,所以验证你的表单是否仍然居中是你想要的结果。
答案 2 :(得分:0)
基于this我会说在属性窗口中看到的高度是一个计算值,包括表单的ClientHeight(在.frm中)+边框和标题栏高度。所以ClientHeight可能就是你要找的号码。
答案 3 :(得分:0)
高度和宽度以Twips(与设备无关的度量单位)存储,因此您必须除以Screen.TwipsPerPixelX和-Y以获得正确的值。对于大多数显示器,这将是15.(使用OneNerd示例中的宽度,9960缇为664像素。)