Windows 7上某些vb6数据网格的问题

时间:2014-01-31 18:22:07

标签: datagrid vb6 windows-7-x64 ocx

我为这个长期问题提前道歉......

我有一个用VB6编写的非常大的项目,我需要在一些Windows 7 PC上使用。数据网格有很多种形式。其中三个数据网格是错误的,因为它们(a)显示数据网格显示之前屏幕上的内容(桌面的一部分,或数据网格下面的应用程序的其他部分)和(b)单击,突出显示,并且滚动不能正常工作(选择一行不会取消选择另一行,单向滚动不会让您向后滚动,以及其他bugginess)。

其他信息:

  • 在WindowsXP和Win7 32位上,问题没有出现;它只出现在Win7 64位
  • 如果在Win7 64位计算机上安装了vb6(是的,还有很多错误),问题就会消失
  • 有一些问题,其他一个网格的行被涂黑了,应用程序中的许多文本框非常暗且难以阅读(在Win7 32和64位上),但这在两种情况下都通过切换得到纠正到Windows 7经典主题(aero off)

我尝试过:

  • 多次操纵MsDatGrd.ocx。我从工作的WinXP,Win7 32位,甚至原始的vb6 SP6安装盘中复制了它。我尝试在syswow64system32文件夹中替换ocx文件,在每个位置取消注册并重新注册。我应该注意,当我从regsvr32.exesystem32文件夹中取消注册文件(syswow64)并收到成功通知后,我仍然在注册表中找到它(regedit)。
  • 我尝试创建新表单并将控件和代码复制到新表单。
  • 我尝试在记事本中删除表单顶部的ocx引用(其中说明了) Object = "{CDE57A40-8B86-11D0-B3C6-00A0C90AEA82}#1.0#0"; "MSDatGrd.ocx")。在这种情况下我甚至没有得到错误,但网格仍然按预期工作。我唯一能够从操作ocx文件得到任何响应的时候是我从syswow64中删除它;那时,应用程序就不会打开。

我认为表单本身可能是一个问题的原因是因为我遇到了来自两个表单的日志文件和破坏的datagrids(注意:每个表单上有1个datagrid)。我想日志文件是在一次编译过程中生成的。他们都说了以下几点:

Could not create reference: '{CDE57A40-8B86-11D0-B3C6-00A0C90AEA82}#1.0#0'.
Could not create reference: '{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0'.

注意:每个文件中的第一个引用是msdatgrd.ocx,第二个引用是mscomctl.ocx(似乎没有任何问题)。

所以...还有什么人能想到帮助我解决这个问题吗?我宁愿修复问题,而不是使用其他方法,如使用mshflexgrid或第三方网格等。

4 个答案:

答案 0 :(得分:0)

通过在兼容模式下运行exe,您可能会发现摆脱了很多问题。右键单击exe文件。然后选择属性,然后选择兼容性选项卡。勾选“以兼容模式运行此程序:”的框,然后选择“Windows XP(service pack 3)”

单击“应用并保存等”,然后再次尝试运行您的应用程序。

黑屏行的问题是颜色是从设计中的默认颜色更改而从系统调色板而不是标准调色板中选择颜色,如高亮显示,突出显示文本等。如果您是在XP机器上更改主题,已设置为系统调色板颜色的颜色也会自动更改以匹配主题。这不适用于Windows 7中的Aero主题,控件将显示为黑色。我认为你唯一的选择是在表单设计器中将颜色更改为标准调色板颜色,或者关闭aero主题(就像你已经完成的那样)。如果你在很多表单上有很多控件,你可以尝试搜索并使用像grepwin这样的颜色代码替换.frm文件但是如果你对你正在做的事情有信心我会尝试这个,并确保你先备份一切。

滚动可能是因为VB6在鼠标滚轮前预定,因此您需要安装第三方应用程序以使鼠标滚轮工作。试试'vbscroll'或'freewheel'。据我所知,这只会影响IDE中的鼠标滚轮。

您还可以在填充数据网格后尝试设置your_msflexigrid_name.redraw=true。这可能会解决一些显示问题。

答案 1 :(得分:0)

我将发布我发现的解决方案,尽管我希望我知道背后的原因。我发现,如果我在表单上的某个地方放置另一个“虚拟”数据网格(它甚至可以是不可见的)并将其绑定并取消绑定到与绑定到错误数据网格的数据源相同的数据源,则错误的数据网格再次可以很好地工作。我注意到,当我这样做时,对该表单中的ocx文件的引用从小写变为大写(但是,当我尝试手动将引用从小写更改为大写而不添加虚拟数据网格时,问题仍然存在)。无论如何,这是一个很好的解决方法。

答案 2 :(得分:0)

如果您的数据网格中有分割,则可以使用以下方法解决问题:

BUG:Split导致DataGrid连续重绘自身 http://support.microsoft.com/en-us/kb/kbview/306886

答案 3 :(得分:0)

此问题与窗口7 64位PC上的DLL注册更相关。在窗口7 64位上注册C:\ Window \ SYSWOW64 \ regsvr32.exe下的数据网格,一切正常。请注意VB6应用程序的所有DLL都必须在 C:\ Window \ SYSWOW64 \ regsvr32.exe YourDLLname.DLL

下注册