[vb6] probleme avec un commondialog

probleme avec un commondialog [vb6] - VB/VBA/VBS - Programmation

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é :jap:

Reply

Marsh Posté le 27-07-2003 à 20:52:20   

Reply

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? :jap:

Reply

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...
 
 :jap:

Reply

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 !

Reply

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!

Reply

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
 
http://kabee.free.fr/contacts_space/all/hfr/err.JPG

Reply

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
 
http://kabee.free.fr/contacts_space/all/hfr/err.JPG

je sais pas car chez moi sa marche chaque fois...

Reply

Marsh Posté le 28-07-2003 à 18:17:54    

c peut-etre son windows tout "relooké" ki cause probleme

Reply

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...

Reply

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 :o

Reply

Marsh Posté le 28-07-2003 à 18:25:50   

Reply

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?

Reply

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" ;)

Reply

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.
 
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" ;)


 
humm.. spoor faire koi ca? j'ai pas tout compris dsl :sweat:

Reply

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.

Reply

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 :
  1. Private Declare Function registrerMonOcx Lib "COMDLG32.OCX" Alias _ "DllRegisterServer"


 
aprés, un ptit:
 
     

Code :
  1. 'Je defini le rep comme celui de mon prog et non celui du rep system, afin de ne pas registrer l'ocx du system mais celui qui est dans le rep du prog
  2. ChDrive Mid(App.Path, 1, 2)
  3. ChDir App.Path
  4. registrerMonOcx


 
et ca marche :)


Message édité par fils_de_la_lumiere le 28-07-2003 à 22:54:57
Reply

Marsh Posté le 29-07-2003 à 08:31:07    

ah ok si tu as trouvé une solution valable, tant mieux :jap:

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed