1

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

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

我们发现的一种解决方法需要进入每个表单的加载事件,并在“表单属性”窗口中手动将“高度”和“宽度”属性设置为观察到的大小。

啊..

此应用程序涉及数十种表单,更多应用程序将提供更多数十种表单。我想构建一个脚本来处理这个问题。

两个问题:

1)我在代码/项目/等中的哪里可以找到“属性”窗口中显示的表单的高度和宽度?搜索 *.frm 文件并没有找到任何赢家;也不会打开 *.frx 文件并将已知的高度或宽度转换为十六进制(然后搜索)。

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

提前致谢。

乔恩

4

4 回答 4

3

FRM 格式记录在 VB6手册中。正如 Angry Jim 观察到的那样,它说高度和宽度存储在 Twips 中。它没有解释 ClientHeight 和 ClientWidth 但正如 OneNerd 和 cmsjr 所说,这是表单内部的大小(没有菜单栏和边框)。如果您有任何将 StartupPosition 设置为手动的表单,则构建服务器也可能会更改 ClientLeft 和 ClientTop。

永远不要在运行时设置表单的高度和宽度。其中包括菜单栏和边框,它们在不同版本的 Windows 上或具有不同主题的厚度不同。所以你会得到错误的尺寸。改为设置 ScaleHeight 和 ScaleWidth,它们是窗体内部的尺寸。VB6 运行时根据这些计算适当的高度和宽度。

And finally, just buy a new build server (or a new video card). Lead all the developers to the boss waving flaming torches and pitchforks, or perhaps just calmly explain the difference between the cost of a PC and the cost of developer time.

于 2009-04-04T09:43:06.080 回答
2

如果您在记事本或任何纯文本编辑器中打开 .frm 文件,则表单大小从顶部开始定义几行:

例如:

 ClientHeight    =   8445
 ClientLeft      =   60
 ClientTop       =   450
 ClientWidth     =   9960

我不确定你为什么会遇到这个问题 - 看起来很奇怪 - 但如果你的构建服务器导致问题,那么我看到的唯一选择是(1)更改你的构建服务器(或者升级视频卡),或者写入您提到的每个表单的加载事件中的代码,尽管如果您在IDE中设置了位置->中心,这可能会影响表单的居中,因此如果这是您想要的结果,请验证您的表单是否仍然居中.

于 2009-04-04T01:30:40.130 回答
0

基于,我会说在属性窗口中看到的高度是一个计算值,其中包括表单的 ClientHeight(在 .frm 中)+ 边框和标题栏高度。所以 ClientHeight 可能是您正在寻找的数字。

于 2009-04-03T21:35:20.133 回答
0

高度和宽度存储在 Twips(与设备无关的测量单位)中,因此您必须除以Screen.TwipsPerPixelXScreen.TwipsPerPixelY获得正确的值。对于大多数显示器,这将是 15。(使用 OneNerd 示例中的宽度,9960 缇是 664 像素。)

于 2009-04-04T02:52:00.810 回答