【问题标题】:Issues with some vb6 datagrids on Windows 7Windows 7 上某些 vb6 数据网格的问题
【发布时间】:2014-02-24 13:47:54
【问题描述】:

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

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

附加信息:

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

我尝试过的:

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

我认为表单本身可能是一个问题的原因是因为我遇到了来自两个表单的日志文件,其中包含损坏的数据网格(注意:每个表单上有 1 个数据网格)。我猜日志文件是在一次编译期间生成的。他们都说:

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 或第 3 方网格等。

【问题讨论】:

    标签: datagrid vb6 windows-7-x64 ocx


    【解决方案1】:

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

    下注册

    【讨论】:

      【解决方案2】:

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

      BUG:拆分导致 DataGrid 不断地重新绘制自己 http://support.microsoft.com/en-us/kb/kbview/306886

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          涂黑行的问题将是颜色从设计中的默认值更改,并且从系统调色板而不是标准调色板中选择了一种颜色,如突出显示、突出显示文本等。如果你当时在 XP 机器上更改主题 已设置为系统调色板颜色的颜色也会自动更改以匹配主题。这不适用于 Windows 7 中的 Aero 主题,控件只会显示为黑色。我认为您唯一的选择是在表单设计器中将颜色更改为标准调色板颜色或关闭航空主题(正如您已经完成的那样)。如果您对许多表单有很多控件,您可以尝试使用 grepwin 之类的颜色代码搜索和替换 .frm 文件,但我只会在您对自己所做的事情有信心的情况下尝试这样做,并确保您首先备份所有内容。

          滚动可能是由于 VB6 早于鼠标滚轮,因此您需要安装第三方应用程序才能使鼠标滚轮工作。尝试“vbscroll”或“freewheel”。据我所知,这只会影响 IDE 中的鼠标滚轮。

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

          【讨论】:

          • 感谢您的回复李。兼容模式并没有解决这个问题,我之前尝试了所有可能的选项组合。事实上,没有什么明显的变化。对于颜色,我检查了两个不同的 DataGrid,一个在 Win7 上不显示为黑色,另一个显示为黑色。两者都具有相同的设置(Windows 主题颜色),所以我认为这不是问题。滚动问题是错误的滚动,而不是它不起作用;它适用于其他一些形式(我实际上已经在 IDE 中应用了该修复程序)。最后,redraw 不是 DataGrid 的属性(仅 flex/hflex)。
          • 对不起,没有更多帮助。两个数据网格是否具有相同的主题颜色?可能是 Aero 主题处理了一些主题颜色,但没有处理其他颜色。
          • 颜色问题原来是 WinXP 中没有出现的故障。在 XP 的设计器中查看时,DataGrid 背景色的不同十六进制颜色仍将预览显示为白色,但在 Win7 上的开发人员中显示为黑色。但是,是的,Aero 处理颜色略有不同是正确的,但这对网格的功能没有帮助。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-08
          • 1970-01-01
          • 1970-01-01
          • 2012-04-25
          • 2014-09-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多