2009-08-04 13 views
10

Estoy experimentando con la escritura de controles ActiveX y noté que parece que no puedo crear un control ActiveX en Visual Basic (6.0) que cuenta con controles un poco más sofisticados. Los controles simples como etiquetas, botones y casillas de verificación parecen funcionar bien, pero tan pronto como trato de agregar, p. un control de árbol para mi formulario, el control ActiveX permanece completamente vacío tan pronto como lo incrusto en alguna aplicación host en otra computadora. Sin embargo, funciona bien en mi caja de desarrollo.¿Cuál es la fuente adecuada para el componente Windows Common Controls 6.0 (MSCOMCTL.OCX)?

Al ir a través de la Proyectos-> Componentes (Ctrl + T) lista, me encontré con dos bibliotecas que aparentemente contienen un control de árbol:

  • Microsoft Windows Common Controls 5.0 (SP2) de Microsoft
  • Controles comunes de Windows 6.0 (SP6)

Tan pronto como agregue cualquiera de los controles de estas bibliotecas a mi formulario, el formulario permanece totalmente gris cuando está incrustado en otra computadora. La otra computadora es un sistema Windows XP, así que esperaba que los redistribuibles faltantes no fueran un problema, teniendo en cuenta la antigüedad de Visual Basic 6. Para estar seguro, instalé los redistribuibles de VB6, pero desafortunadamente eso no hizo la diferencia.

¿Alguien sabe por qué mi control ActiveX se mantendría gris en otras computadoras, pero no en la mía, tan pronto como agregue alguno de los controles de las bibliotecas anteriores a mí? FWIW Solo necesito un control de árbol así que si hay alguna otra biblioteca más apropiada disponible, me parece bien.

ACTUALIZACIÓN: Al final resultó que, ayuda a descargar MSCOMCTL.OCX en C: \ Windows \ System32 en el otro equipo y luego registrarlo a través de regsvr32 C:\WINDOWS\SYSTEM32\MSCOMCTL.OCX. Sin embargo, no encontré una fuente oficial para este archivo, y ejecutar el registro COM a mano me parece engorroso. ¿Realmente no hay redistribuible que pueda usar?

+1

Los primeros controles comunes 5.0 (comctl32.ocx) tienen mejor compatibilidad con XP/Vista que los controles comunes 6.0 (mscomctl.ocx). Sugiero usarlo en su lugar – rpetrich

+1

@rpetrich: Ah, ¿en serio? ¿Es eso lo que siente, o tiene algunos documentos para respaldarlo? Si eso es cierto, de hecho iré por CC 5.0. –

Respuesta

10

El tiempo de ejecución de VB6 está preinstalado en XP y superior, pero el componente de controles comunes al que hace referencia no lo está.

Pruebe la instalación de Microsoft Visual Basic 6.0 Common Controls redistribuible en las máquinas del cliente o evento, realice una configuración para su aplicación.

Editar:

Opps, el enlace es para una actualización que no instala los OCX si no está ya presente. El único redistribuible que encuentro es un merge module para Windows Installer.

+0

¡Ah, interesante! De hecho, descargar 'mscomctl.ocx' en la máquina XP y almacenarlo en C: \ WINDOWS \ SYSTEM32 ayudó. Luego tuve que registrar el servidor (ejecutando 'regsvr32 C: \ WINDOWS \ SYSTEM32 \ MSCOMCTL.OCX') y eso hizo que todo funcionara. Sin embargo, esto es bastante engorroso, ¿realmente no hay una manera más fácil? : -/ –

+0

Si coloca el OCX en la misma carpeta desde la que se ejecuta el EXE, el tiempo de ejecución de VB intentará registrarlo automágicamente (no es necesario regsvr32).La otra alternativa es COM sin registro con Make My Manifest (http://mmm4vb6.atom5.com/) si no desea una configuración completa. – wqw

+2

No coloque OCX comunes en la carpeta de la aplicación y permita que se registren automáticamente cuando el programa VB6 los invoque. Aquí es donde viene DLL Hell. Cree un instalador adecuado para su aplicación que verifique la versión y mantenga el conteo de uso en el registro como se supone que debe hacerlo. O use MMM, pero si lo hace, usted es responsable de dar servicio a las dependencias a medida que se lanzan nuevas versiones (principalmente por razones de seguridad). – Bob77

Cuestiones relacionadas