probleme avec un commondialog [vb6] - VB/VBA/VBS - Programmation
Marsh Posté le 27-07-2003 à 23:09:13
bon la j'ai fait plus simple, j'ai
- réinstallé vb6
- créé un nouveau projet
- inséré un common dialog sur la form vide
- compilé et filé à une personne chez qui ca ne fonctionne pas
et il a l'erreur du module introuvable. alors ma question est que doit faire cet personne pour que se programme fonctionne?
Marsh Posté le 28-07-2003 à 03:43:13
bon je simplifie encore :
comment lorsqu'un composant n'a pas pu être trouvé dans une form, le programme ne se ferme t'il pas, une sorte de on error resume next pour la form...
Marsh Posté le 28-07-2003 à 08:45:46
C'est pas que la form, mais le programme compilé, que tu dois lui envoyer. Tu joins à ça le fichier *.ocx qui mets dans le dossier système ou à la racine de l'exe ! Et là, sa fonctionne !
Marsh Posté le 28-07-2003 à 18:01:06
euh non je lui é filé comdlg32.ocx dans le rep de l'exe mais erreur quand meme à l'ouverture!
Marsh Posté le 28-07-2003 à 18:14:28
voila l'erreur qui apparait meme si le gars a mi comdlg32.ocx dans le rep de l'exe avec seulement un common dialog dans la form
Marsh Posté le 28-07-2003 à 18:17:33
fils_de_la_lumiere a écrit : voila l'erreur qui apparait meme si le gars a mi comdlg32.ocx dans le rep de l'exe avec seulement un common dialog dans la form |
je sais pas car chez moi sa marche chaque fois...
Marsh Posté le 28-07-2003 à 18:23:33
?? ba nan stun simple theme, nan je vient de trouver il falait en fait que le gars registre son ocx
regsvr32 comdlg32.ocx
mais le bleme c que je voit pas comment dire a tout les gars qui on ce bleme avec mon prog de faire ca...
Marsh Posté le 28-07-2003 à 18:25:50
gogoprog a écrit : c peut-etre son windows tout "relooké" ki cause probleme |
rien à voir, d'ailleurs VB ignore les thèmes, seule la barre de titre et les bordures seront relookées
Marsh Posté le 28-07-2003 à 19:02:39
y'a t'il une routine en vb pour verifier si un ocx est registré et si ce n'est pas le cas le faire tout ca dans le programme lui meme?
Marsh Posté le 28-07-2003 à 19:27:40
ça existe oui, j'en ai quelques unes au boulot mais je peux déjà te dire que sur base du type de l'objet, tu peux obtenir le CLSID avec la fonction CLSIDFromProgID de l'API Win32.
En général, pour trouver des exemples, il suffit de prendre google, de lui dire "vb6 CLSIDFromProgID" (dans le cas présent), et tu vas trouver ton bonheur assez rapidement.
Je te suggère d'aller directement ici si tu n'as pas peur de l'anglais, ce type a des tonnes d'exemples d'utilisation de l'API Win32 et en cette matière, je le prends comme référence
Une fois le CLSID trouvé, tu peux utiliser une autre fonction pour retrouver le path de l'exécutable, mais je ne pourrai te dire son nom que demain.
Et pour info, le nom logique du composant que tu cherches est "MSComDlg.CommonDialog"
Marsh Posté le 28-07-2003 à 20:44:20
drasche a écrit : ça existe oui, j'en ai quelques unes au boulot mais je peux déjà te dire que sur base du type de l'objet, tu peux obtenir le CLSID avec la fonction CLSIDFromProgID de l'API Win32. |
humm.. spoor faire koi ca? j'ai pas tout compris dsl
Marsh Posté le 28-07-2003 à 21:12:08
bon d'abord ya le type de contrôle que tu utilises, dans le cas présent, il s'agit de MSComDlg.CommonDialog.
MSComDlg est le nom logique de la librairie, et CommonDialog est le nom logique du contrôle. C'est le paramètre passé à la fonction dont j'ai parlé.
Ensuite, il y a le fameux CLSID, un nombre 128 bits qui identifie de manière unique un composant COM/ActiveX, comme par exemple cette fameuse boîte de dialogue, ou encore n'importe quel contrôle ou classe utilisée par VB. D'ailleurs VB parle couramment l'ActiveX, ça tombe très bien, mais il se garde de nous montrer tout ce qui se cache derrière.
Pour l'exemple, le CLSID du CommonDialog chez moi ressemble à ceci: {F9043C85-F6F2-101A-A3C9-08002B2F49FB}
Ensuite, le CLSID lui-même doit permettre de retrouver le fichier exécutable (DLL, OCX ou EXE) qui permet l'utilisation de ce composant. C'est cette seconde fonction dont j'ai oublié le nom qui doit jouer ce rôle.
Je peux poster du code qui fait ça demain si tu veux.
Marsh Posté le 28-07-2003 à 22:54:31
merci pour tes explications c'est trés clair
de mon coté j'ai trouvé la meilleur des solutions a mon gout
mon probleme était:
si qq1 ouvre une form ou il y a un common dialog, ocx donc non registré chez lui: plantage
et j'ai trouvé ce ptit bout de code sympa qu'utilise regsvr32.exe, il regsitre a chaque ouverture du prog les ocx nécéssaire au fonctionnement.
Code :
|
aprés, un ptit:
Code :
|
et ca marche
Marsh Posté le 29-07-2003 à 10:59:09
Sinon, les packages fait par VB avec "Assistant Empaquetage & déploiement" enregistre automatiquement les ActivesX référencés dans le projet.
Marsh Posté le 27-07-2003 à 20:52:20
j'utilise le composant common dialog (COMDLG32.OCX) pour faire selectionner à l'utilisateur des icones sur son disque dur (la fenetre parcourir qu'on voit partout koi), le problème c'est que certaines personne me dise avoir se message "erreur système &h800700 le module spécifié est introuvable" lors de l'ouverture d'une feuille ou se trouve un common dialog. Je leur est donc envoyé une version de mon programme sans common dialog pour tester et la ca marche.
Qq1 peut t'il me dire de koi cela peut t'il venir et ya t'il moyen de se passer de l'ocx pour faire ce que je veut faire (je l'ai deja fait pour la selection d'un rep par ex)
merci bocoup car la je suis bloqué