DLL, PictureBox, code ect...

Résolu
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 - 13 mars 2006 à 12:58
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 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?

14 réponses

rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
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>
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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!!
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 mars 2006 à 17:34
mon code reprend trop de ... bidouilles

on tourne en boucle :



dans la dll, j'ai une form avec 30 picturebox contenant mes bmp voulues et pas de code (enfin çà dépend, mais çà ne joue pas).

dans ma classe j'ouvre la form (appel, pas visible), que je décharge à la fin







' *- INITIALIZE -*

Private Sub Class_Initialize()

Load Frm_Resources

End Sub

'

'

' *-TERMINATE -*

Private Sub Class_Terminate()

Load Frm_Resources

End Sub





et dans mes appels (par exemple ) :



Public Property Get pBackGround() As StdPicture

Set pBackGround = Frm_Resources.Pic_00frm.Picture

End Property







pour le principe de la dll en plug-in, je suis parti de la base de Galy (que tu as vu apparemment aujourd'hui)



mon ocx compte son nombre d'instances et créé ou non une collection de mes dll (ressources) voulues.

j'accède donc à mes propriétés comme à une collection :



Set ObjDll = Mod_MainAndTools.AfResource.GetDllObject(mSkinIndice)



et je gère ensuite avec ObjDll (as object) dont les propriétés sont toujours les mêmes (cette fameuse stdpicture pour le cas présent)

tu as maintenant des noms de variables en plus, mais çà ne va pas
forcément t'avancer à grand chose, c'est juste ce que je disais au
début.



bon courage en tout cas
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
13 mars 2006 à 13:38
salut,

OUI (pour tout).



pour ta dll, il faut une classe (obligatoire) et une Form.

ta classe faisant le lient entre la form[projet activex] et le code form[projet exe standard].



pour resource, possible mais je ne vois pas pourquoi. tu peux directement stoquer l'image dans la pbox de la form de la dll.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
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 ...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
14 mars 2006 à 16:46
réponse intelligente et fort agréable à lire
0
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
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 ...
0
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
14 mars 2006 à 19:29
Ok Grand merci
Je pense que j'ai compris comment faire mais PlugIn,

La suite bientot sur le code déposé !

Un grand merci a vous deux !
0
amezghal Messages postés 385 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 21 août 2015 5
17 mars 2006 à 14:16
tester cela:
public property get getpicture(pic as picturebox)
pic.picture=form1.picture1.picture
end property
0
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
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 !
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 mars 2006 à 15:59
c'est assez bizarre, j'utilise des stdpicture par dll, un peu de la même manière que toi (plugin) et y'a pas de mal....
0
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
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é !
0
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
17 mars 2006 à 16:57
mon mail = nico1610_68@yahoo.fr
0
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
17 mars 2006 à 17:58
A c'est peut être parceque je ne mettais pas le SET !!
Je verifie ...

OH LOL CA MARCHE !!

UN GRAND MERCI A TOI !!!

TU EST UN DIEU .... ^^
0
Rejoignez-nous