cs_nico1610
Messages postés395Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention19 juin 2009
-
13 mars 2006 à 12:58
cs_nico1610
Messages postés395Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention19 juin 2009
-
17 mars 2006 à 17:58
Voila mon problème : je veux créer une dll sous vb6 que je puisse appeler dans un autre programme VB, mais je veut que cette Dll contienne une picturebox avec une image de fond, des bouton, du code ect... et que dans mon programme en VB je veut pouvoir appeller cette picturebox pour l'insérer dans une des forms et que sont code lui aussi soit intégrer.
Une sort de plugin, sauf que je sait pas faire, jusqu'a mainteant les dll que je créai je n'y appelai que des String, des longs ect...
Autre question, est il possible de créer une dll qui contienne une image(en bmp dans un fichier ressource) et de pouvoir appler cette image dans un picturebox ou une form?
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 14 mars 2006 à 16:25
Salut Nico1610,
je ne comprends pas tout ce que tu dis (ex: pictureBox qui a un bouton "Afficher l'heure", je sais que c'est possible, mais c'est bizarre), mais moi, parfois, on ne comprend pas tout ce que je dis.
La technique des pluggins (ou Addins ou Compléments...) se repose souvent sur une technologie simple : les interfaces. Une interface est un contrat (dixit MSDN) entre 2 parties.
En l'occurrence, ton form quelconque dit "je veux manipuler un objet Pcpt et lui dire, sans me tromper et les yeux fermés, Pcpt.DonnesDuCode(LaIci)". De l'autre côté, ta dll, doit signer le contrat et dire "quand on me direras DonnesDuCode(LaIci), je donnerais du code, dans LaIci". Je fais simple, pour... simplifier
1./
Il te faut créer une bibliothèque (conseil: dll activeX) contenant l'interface. Tu l'appelleras ContratQuestionReponse.dll, le nom du projet sera aussi ContratQuestionReponse, et elle ne contiendra qu'une classe que tu appelleras Nico1610aDit. Cette classe implémentera une seule méthode (function), nommée DonnesDuCode(ByRef LaIci As String), et, c'est important, ne contiendra pas de code (je crois que dans d'autres langages, on appelle ça une méthode abstraite). Tu compiles, et tu registres ta dll auprès de Windows.
2./
Tu crées ensuite une autre dll (conseil: tjrs active X, pourquoi se priver), que tu appeleras AdminVBFrance.dll. Tu lui ajoutes une référence à ContratQuestionReponse (que tu dois trouver dans la liste des disponibles, si tu as registré la bibliothèque interface).
Tu y crées une classe nommée ToujoursPret.
Au niveau module de cette classe (cad zone déclaration avec la combo de gauche du panneau de code ouvert), tu écris :
Implements ContratQuestionReponse.Nico1610aDit
Toujours dans la combo de gauche, cherches à présent l'objet Nico1610aDit et sélectionnes le. Tu vas te retrouver dans une section de code nommée Nico1610aDit_DonnesDuCode(LaIci As String). C'est ici que se retrouve tous ceux qui chercheront à l'avenir à répondre aux sollicitations qu'on leur fera, les yeux fermés et sans se tromper.
3./
Enfin, crée un projet (ex: exe standard, mais tout est possible), et ajoute aussi une référence à ContratQuestionReponse (que tu dois trouver dans la liste des disponibles, si tu n'es pas en train de lire le 3./ avant le 2./).
Il te suffit, maintenant, de :
- Dim strMonEspritVorace as String
- Dim Pcpt as ContratQuestionReponse.Nico1610aDit 'on ne déclare que l'interface, qu'on connait déjà et que tout le monde respecte
- set Pcpt = CreateObject("AdminVBFrance.ToujoursPret") ' on pourrait faire une liaison précoce et utiliser l'opérateur New, mais si on veut gérer des Pluggins que l'on ne connait qu'au dernier moment, il vaut mieux des liaisons tardives
- PcpT.DonnesDuCode strMonEspritVorace ' et Pcpt s'exécute sans sourciller, comme d'habitude, et tu retrouves le code dans...
Mais non, le code, il est juste au dessus :P
Ensuite, tu fait autant de dll que tu en souhaites (AdminVBExpert.dll, AdminDeveloppez.dll...), qui implémentent l'interface définie, et dont tu pourras instancier les classes, et bouffer du code jusqu'à la lie :)
Tu noteras que tu peux inventer un sous-système de la technologie de ton choix (fichier ini, base de registre, base de données, intranet...) pour savoir quels sont les Pluggins à instancier, puisqu'on les instancie grâce à leur ClassID.
Tu noteras aussi que, quand tu auras réussi à mettre en oeuvre cet exemple fort simple, tu auras plein d'autres idées qui viendront (oh, mais est-ce que c'est...? est-ce qu'on peut...? et est-ce que si je...?), et qu'il faudra que tu te répondes "sûrement, je vais essayer", car c'est le 2ème meilleur moyen d'avancer, en se dépassant ,(le 1er meilleur moyen est de demander au Admin CS), et de corroborer le célèbre "C'est en se mochant qu'on devient moucheron!".
Je t'ai déjà dit que, parfois, on ne comprend pas ce que je dit?
rvblog<SUP>n
PS: pour les Admin CS, j'avais un peu de temps, et comme ça, c'est pas toujours les mêmes qui s'y collent! et si vous avez une réponse à ma question du 14/03/06, je suis preneur!</SUP>
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 14 mars 2006 à 19:02
pour l'image (dans la pic), j'ai déjà répondu.
(la classe a un objet pic, une propriété stdpicture, et récupère le
pic.picture de la form que le projet activex contient. la classe
faisant le lien, elle renvoie son stdpicture)
par contre si par exemple ta pic (activex) contient un bouton et que tu
veux, à l'appel du plugin, que le bouton se dessine dans la pic exe, çà
sous forme de plugin (donc ne pas savoir à l'avance la structure de la
dll), tu ne pourras qu'indirectement (getparent, setparent).
sinon il faut passer par un ctl dans la dll.
ps : Dim PictureForDll as New PictureBox impossible!!
cs_nico1610
Messages postés395Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention19 juin 20091 14 mars 2006 à 07:51
tu est bien gentil mais je voudrai du code, car j'ai essyer et ca ne marche pas.
Il me faudrai donc une source qui montre coment recupérer une image d'une dll du style :
'## La module de calsse a placer
...
'## La fonction pour appeler
me.Picture1.picture = Mydll.GetPicture1
Et comment le code peut intéragire entre la dll et une picture box insérer dans ma forme ?
Le but est de créer des plugin qui s'ajouteron et qui pouron avoir autan de fonction qu voulu et autant de bouton que voulu.
Du style Dans la dll , il y a une pictureBox qui a un bouton "Afficher l'heure"
Dans ma form j'apelle cette picture box depuis ma dll, et quand on clic sur le le bouton ca va éxécuté de code contenu dans la dll !
Le principe est de pouvoir charger autan de ces picture box que possible sans en connaitre un traite mot de code ! juste le :
Dim Pic as ew PictureBox
Pic = mydll.pictureBoxInsert
Pic.left = Mydll.PicLeft
ect ...
cs_nico1610
Messages postés395Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention19 juin 20091 14 mars 2006 à 18:31
Super ton truc, je vien de comprendre le problème des plugin (qui n'en est plus un pour moi !)
Un grand merci, je peut donc créer des plugin a la folie !!
Mais mon problème (et oui) est toujours dans les picture box !!
En faite je me sert des picturebox comme de conteneur et je met dedans des controles (boutton, image, PictureBox(pourquoi pas!) ...)
Et dans notre picturebox de départ, chaque controle à un code spécifique, et ce que je veut faire c'est justement un plugin (dll) qui ai une Picture Box toute faite avec ses controles à l'interieur et le code pour chaque controle. Et comme ca dans ma form de départ (dans mon projet Exe) je n'ai plus qu'a faire:
Dim MonPlugIn as MaDll.NomDuPlugIn
Dim PictureForDll as New PictureBox
CreatPlugin in PictureForDll as MonPlugIn.PicturePourForm
Naturellement je ne cherche pas a savoir comment faire la fonction CreatPlugin
MAIS comment créer une fonction dans ma classe de dll qui puisse envoyer au programme exe la picturebox avec le code, l'image de fond de la picturebox ...
Là est mon problème !
Naturellemnt tu m'as déja boucuop aider mais ...
cs_nico1610
Messages postés395Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention19 juin 20091 17 mars 2006 à 15:39
si seulemnt c'était aussi simple !
Le stdpicture non plus ne marche pas alors je fait un fichier externe que je récupére!
dommage, mais si je trouve mieux je le ferai savoir sur ce post !
cs_nico1610
Messages postés395Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention19 juin 20091 17 mars 2006 à 16:57
Si tu peut m'envoyer un exemple vite fait se serai simpa ,
juste une dll + plugin + exe fait en 2 minute a evc une stdpicture en exemple
STP !!
Car la je galère grave ! et ma solution boiteuse me plai qu'a moitié !