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