2009-08-04 6 views
10

J'expérimente avec l'écriture de contrôles ActiveX et remarqué que je ne peux pas sembler créer un contrôle ActiveX dans Visual Basic (6.0) qui comporte des contrôles légèrement plus sophistiqués. Des contrôles simples comme des étiquettes, des boutons et des cases à cocher semblent fonctionner correctement, mais dès que j'essaie d'ajouter, par ex. un contrôle d'arborescence à mon formulaire, le contrôle ActiveX reste entièrement vide dès que je l'intègre dans une application hôte sur un autre ordinateur. Cela fonctionne bien sur ma boîte de développement cependant.Quelle est la source appropriée pour le composant Windows Common Controls 6.0 (MSCOMCTL.OCX)?

Tout en passant par l'Projets-> Composants (Ctrl + T) liste, je trouve deux bibliothèques qui contiennent apparemment un contrôle de l'arbre:

  • Microsoft Windows Common Controls 5.0 (SP2)
  • Microsoft Windows Common Controls 6.0 (SP6)

Dès que j'ajoute l'un des contrôles de ces bibliothèques à mon formulaire, le formulaire reste entièrement gris lorsqu'il est incorporé sur un autre ordinateur. L'autre ordinateur est un système Windows XP, donc j'espérais que les redistribuables manquants ne poseraient pas de problème, étant donné l'ancienneté de Visual Basic 6. Pour être sûr, j'ai installé les redistribuables VB6, mais malheureusement cela n'a pas fait de différence.

Est-ce que quelqu'un sait pourquoi mon contrôle ActiveX resterait gris sur d'autres ordinateurs, mais pas sur le mien, dès que j'ajoute l'un des contrôles des bibliothèques ci-dessus pour me former? FWIW J'ai juste besoin d'un contrôle des arbres, donc s'il y a une autre bibliothèque, plus appropriée, disponible - ça me va.

MISE À JOUR: En fait, il aide à télécharger MSCOMCTL.OCX dans C: \ WINDOWS \ system32 sur l'autre ordinateur, puis l'enregistrer via regsvr32 C:\WINDOWS\SYSTEM32\MSCOMCTL.OCX. Cependant, je n'ai pas trouvé de source officielle pour ce fichier, et lancer l'enregistrement COM à la main me semble lourd. Est-ce qu'il n'y a vraiment pas de redistribuable que je pourrais utiliser?

+1

Les Commandes Commandes 5.0 les plus anciennes (comctl32.ocx) ont une meilleure compatibilité avec XP/Vista que les Commandes Commandes 6.0 (mscomctl.ocx). Je suggère de l'utiliser à la place – rpetrich

+1

@rpetrich: Oh, vraiment? Est-ce votre intuition, ou avez-vous des documents à l'appui? Si c'est vrai, je choisirais plutôt CC 5.0. –

Répondre

10

L'exécution de VB6 est préinstallée sur XP et au-dessus, mais le composant Commandes communes que vous référencez ne l'est pas.

Essayez d'installer Microsoft Visual Basic 6.0 Common Controls redistribuable sur les machines client ou événement mieux faire une configuration pour votre application.

Edit:

Opps, le lien est une mise à jour qui n'installe pas les OCX si pas déjà présent. Le seul redistribuable que je trouve est un merge module pour Windows Installer.

+0

Ah, intéressant! En effet, le téléchargement de 'mscomctl.ocx' dans la machine XP et son stockage dans C: \ WINDOWS \ SYSTEM32 ont aidé. J'ai ensuite eu besoin d'enregistrer le serveur (en exécutant 'regsvr32 C: \ WINDOWS \ SYSTEM32 \ MSCOMCTL.OCX') et cela a tout fait fonctionner. C'est assez lourd, mais n'y a-t-il vraiment pas de moyen plus facile? : -/ –

+0

Si vous mettez l'OCX dans le même dossier que l'exécutable EXE, VB runtime essaiera de l'enregistrer automatiquement (pas besoin de regsvr32).L'autre alternative est COM sans reg avec Make My Manifest (http://mmm4vb6.atom5.com/) si vous ne voulez pas d'installation complète. – wqw

+2

Ne placez pas les OCX courants dans le dossier de l'application et autorisez-les à s'auto-enregistrer lorsque le programme VB6 les appelle. C'est de là que DLL Hell vient. Créez un programme d'installation approprié pour votre application qui vérifie la version et maintient le nombre d'utilisations dans le registre comme vous êtes censé le faire. Ou utilisez MMM, mais si vous le faites, vous êtes responsable de l'entretien des dépendances à mesure que de nouvelles versions sont publiées (principalement pour des raisons de sécurité). – Bob77

Questions connexes