2014-01-31 7 views
0

Заранее прошу прощения за длинный вопрос ...Проблемы с некоторыми VB6 DataGrids на Windows 7

У меня есть очень большой проект, написанный на VB6, что мне нужно использовать на некоторых Windows 7, ПК. На них много форм с датагридами. Три из этих datagrids являются ошибками в том смысле, что они (а) имеют остатки того, что было на экране, до того, как показываются датаариды (части рабочего стола или другие части приложения под datagrid) и (b) щелчок, выделение , и прокрутка не работает должным образом (выбор одной строки не отменяет выбора другой строки, прокрутка в одну сторону не позволяет вам прокручивать назад, среди прочих ошибок).

Дополнительная информация:

  • на WindowsXP и Win7 32-бит, проблема не появляется; он появляется только на Win7 64-bit
  • Если vb6 установлен (да, с многочисленными ошибками в пути) на 64-разрядной машине Win7, проблема пропадает
  • Есть некоторые проблемы, когда строки другой сетки и многие текстовые файлы в приложении очень темные и трудночитаемые (как на Win7 32, так и на 64-разрядных), но это исправлено в обоих случаях, переключившись на классическую тему Windows 7 (aero off)

То, что я пробовал:

  • манипулировал MsDatGrd.ocx м Нью-Йорк Таймс. Я скопировал его из рабочего WinXP, из 32-разрядного Win7 и даже с исходного установочного диска vb6 SP6. Я пробовал каждую замену файла ocx в папках syswow64 и system32, незарегистрированных и перерегистративных в каждом месте. Я должен отметить, что когда я незарегистрировал файл (regsvr32.exe из обеих папок и syswow64) и получил уведомление об успехе, я все равно нашел его в реестре (regedit).
  • Я попытался создать новую форму и скопировать элементы управления и код в новую форму.
  • Я попытался удалить ссылку на ocx в верхней части формы в блокноте (где сказано Object = "{CDE57A40-8B86-11D0-B3C6-00A0C90AEA82}#1.0#0"; "MSDatGrd.ocx"). Я даже не получил ошибку в этом случае, но сетка все еще работала, как ожидалось. Единственный раз, когда я мог получить ответ от управления файлом ocx, я удалил его из syswow64; в этот момент приложение просто не откроется.

Причина, по которой я считал, что форма сама по себе может быть проблемой, связана с тем, что я столкнулся с файлами журналов из двух форм с разбитыми датаидами (примечание: 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 или стороннюю сетку и т. Д.

ответ

0

Я собираюсь опубликовать решение, которое я обнаружил, хотя мне жаль, что я не знал причину этого. Я обнаружил, что если я помещаю другой «фиктивный» datagrid где-нибудь в форме (он может даже быть невидимым), и связывает и отвязывает его к тому же источнику данных, что и связанный с багги datagrid, багги datagrid работает красиво снова. Я заметил, что когда я это сделал, ссылка на файл ocx в этой форме изменилась с нижнего регистра на верхний регистр (однако, когда я попытался просто вручную изменить ссылку с нижнего регистра на верхний регистр, не добавляя фиктивный datagrid, проблема сохранилась). Во всяком случае, это отличное решение.

0

Возможно, вы избавитесь от множества проблем, запустив exe в режиме совместимости. Щелкните правой кнопкой мыши файл exe. Затем выберите свойства, а затем вкладку совместимости.Отметьте поле, в котором говорится: «Запустите эту программу в режиме совместимости для:» и выберите «Windows XP (пакет обновления 3)».

Нажмите «Применить» и сохранить и т. Д., А затем повторите попытку запуска приложения.

Проблема с черными строками будет заключаться в том, что цвет был изменен от значения по умолчанию в дизайне, а цвет был выбран из системной палитры, а не стандартной палитры, как в выделенном, выделенном тексте и т. Д. Если бы вы были тогда чтобы изменить тему на компьютере XP, цвета, которые были установлены в цвета палитры системы, также автоматически меняются в соответствии с темой. Это не работает с темой Aero в Windows 7, и элемент управления будет просто черным. Я думаю, что ваш единственный вариант - изменить цвет на стандартный цвет палитры в дизайнере формы или отключить тему aero (как вы уже сделали). Если у вас много элементов управления на множестве форм, вы можете попробовать выполнить поиск и заменить через .frm файлы цветовым кодом, используя что-то вроде grepwin, но я бы попробовал только это, если вы уверены в том, что делаете, и убедитесь, что вы сначала сделайте резервную копию.

Прокрутка может быть вызвана тем, что VB6 предваряет колесико мыши, поэтому вам нужно установить стороннее приложение, чтобы заставить колесо мыши работать. попробуйте 'vbscroll' или 'freewheel'. Это просто повлияло бы на колесико мыши в IDE, насколько я знаю.

Вы также можете попробовать установить your_msflexigrid_name.redraw=true после заполнения данных. Это может устранить некоторые проблемы с отображением.

+0

Благодарим вас за отзыв Lee. Режим совместимости не разрешил эту проблему, и я предвидел все возможные комбинации опций. На самом деле ничего заметного не изменилось. Для цвета я проверил два разных DataGrids, один из которых не выглядит черным на Win7, а другой - на нем. Оба имеют одинаковые настройки (цвета тем оформления), поэтому я не думаю, что это проблема. Проблема с прокруткой - прокрутка с ошибкой, а не то, что она не работает; он работает с некоторыми другими формами (я уже применил это исправление уже в среде IDE). Наконец, перерисовка не является свойством DataGrid (только flex/hflex). – user1422348

+0

Жаль, что это не помогло. У обеих сеток данных одинаковый цвет темы? Может быть, тема Aero обрабатывает некоторые цвета темы, но не другие. –

+0

Проблема цвета оказалась ошибкой, которая не появлялась в WinXP. Другой гексаговый цвет для фона DataGrid все еще показывал предварительный просмотр как белый, если его рассматривали в дизайнере на XP, но показывал черный в разработчике на Win7. Но да, вы правы, что Aero обрабатывает цвета немного разные, но это не влияет на функциональность сетки. – user1422348

0

Эта проблема больше связана с регистрацией DLL в окне 7 64-битный ПК. В окне 7 64 бит зарегистрируйте datagrid под C: \ Window \ SYSWOW64 \ regsvr32.exe и все работает. Обратите внимание, что все DLL приложения VB6 должны зарегистрироваться под номером C: \ Window \ SYSWOW64 \ regsvr32.exe YourDLLname.DLL