使用命令行构建忽略VB6窗体高度/宽度

时间:2009-04-03 21:25:34

标签: vb6 adapter truncation

我们正在尽快退出VB6,但与此同时我们已经开始从构建服务器上的命令行构建我们的VB6应用程序。

问题:构建服务器有一个基本的视频适配器,导致表单被截断为基本适配器的分辨率,而不是表单本身的高度和宽度。

我们发现的一种解决方法需要进入每个Form的Load Event并在Form Properties窗口中手动将Height和Width属性设置为观察到的大小。

唉..

此应用程序涉及许多表单,而更多应用程序涉及更多表单。我想构建一个脚本来处理这个问题。

两个问题:

1)在代码/项目/ etc中,我在“属性”窗口中找到窗体的高度和宽度?搜索* .frm文件并没有找到任何获胜者;也没有打开* .frx文件并将已知的高度或宽度转换为十六进制(然后搜索)。

2)除了编辑每个表格之外,我还能做些什么吗?

提前致谢。

乔恩

4 个答案:

答案 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像素。)