OVH Cloud OVH Cloud

Création d'un activex instanciable avec CreateObject

3 réponses
Avatar
LudoO
Bonjour,

Je souhaite cr=E9er un controle Activex (rtfbox utilisant=20
RichEd20.dll).
L'utilisation en mode "Early Binding" fonctionne sans pb :
Dim obj As RichEdit.rtfBox
Set obj =3D New RichEdit.rtfBox

Par contre, je voudrais cr=E9er dynamiquement plusieurs=20
instances de ce controle afin d'obtenir un formulaire.
J'utilise CreateObject("Late Binding").

Dim obj As object
Set obj =3D CreateObject("RichEdit.rtfBox")

Malheureusement, j'obtiens un message d'erreur =E0 la=20
cr=E9ation :
erreur 398 "Site client non disponible"

Apres qq recherches, je comprends que je fais appel =E0=20
UserControl lors de UserControl_InitProperties alors qu'il=20
n'existe pas encore.
- UserControl.Ambient.UserMode
- UserControl.hwnd
- UserControl.Parent.hwnd

J'ai trouv=E9 une explication indiquant qu'il est necessaire=20
d'impl=E9menter une interface IDispatch pour utiliser=20
createObject et donc rendre disponible l'acces =E0=20
UserControl lors de InitProperties.

"CreateObject call invokes CoCreateInstance with the=20
object's CLSID and requests a pointer to the object's=20
IDispatch interface."=20
(http://sern.ucalgary.ca/Courses/CPSC/547/W2000/webnotes/CO
M/COM.html)

Une m=E9thode alternative fonctionne
set obj =3D Controls.Add("RichEdit.rtfBox","rtfName")
mais necessite de passer par l'objet OBJECT pour manipuler=20
les m=E9thodes et propri=E9t=E9s de l'ocx.
obj.object.text=3D"hello"
alors que les methodes de base se trouvent toujours sous=20
obj :
obj.visible =3D true

Est ce que mes explications sont exactes ?
Comment modifier mon controle activex de facon a ce que je=20
puisse en cr=E9er des instances dynamiquement avec=20
CreateObject ?
Utiliser une typelib OLE... Impl=E9menter une gestion de=20
IDispatch... Autre chose...

Merci de votre r=E9ponse

LudoO

3 réponses

Avatar
ng
Salut,

Avec quoi as tu créé ton controle ? VB ? VC++?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

LudoO wrote:
Bonjour,

Je souhaite créer un controle Activex (rtfbox utilisant
RichEd20.dll).
L'utilisation en mode "Early Binding" fonctionne sans pb :
Dim obj As RichEdit.rtfBox
Set obj = New RichEdit.rtfBox

Par contre, je voudrais créer dynamiquement plusieurs
instances de ce controle afin d'obtenir un formulaire.
J'utilise CreateObject("Late Binding").

Dim obj As object
Set obj = CreateObject("RichEdit.rtfBox")

Malheureusement, j'obtiens un message d'erreur à la
création :
erreur 398 "Site client non disponible"

Apres qq recherches, je comprends que je fais appel à
UserControl lors de UserControl_InitProperties alors qu'il
n'existe pas encore.
- UserControl.Ambient.UserMode
- UserControl.hwnd
- UserControl.Parent.hwnd

J'ai trouvé une explication indiquant qu'il est necessaire
d'implémenter une interface IDispatch pour utiliser
createObject et donc rendre disponible l'acces à
UserControl lors de InitProperties.

"CreateObject call invokes CoCreateInstance with the
object's CLSID and requests a pointer to the object's
IDispatch interface."
(http://sern.ucalgary.ca/Courses/CPSC/547/W2000/webnotes/CO
M/COM.html)

Une méthode alternative fonctionne
set obj = Controls.Add("RichEdit.rtfBox","rtfName")
mais necessite de passer par l'objet OBJECT pour manipuler
les méthodes et propriétés de l'ocx.
obj.object.text="hello"
alors que les methodes de base se trouvent toujours sous
obj :
obj.visible = true

Est ce que mes explications sont exactes ?
Comment modifier mon controle activex de facon a ce que je
puisse en créer des instances dynamiquement avec
CreateObject ?
Utiliser une typelib OLE... Implémenter une gestion de
IDispatch... Autre chose...

Merci de votre réponse

LudoO


Avatar
Ludoo
En VB6
bien sur

-----Message d'origine-----
Salut,

Avec quoi as tu créé ton controle ? VB ? VC++?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

LudoO wrote:
Bonjour,

Je souhaite créer un controle Activex (rtfbox utilisant
RichEd20.dll).
L'utilisation en mode "Early Binding" fonctionne sans




pb :
Dim obj As RichEdit.rtfBox
Set obj = New RichEdit.rtfBox

Par contre, je voudrais créer dynamiquement plusieurs
instances de ce controle afin d'obtenir un formulaire.
J'utilise CreateObject("Late Binding").

Dim obj As object
Set obj = CreateObject("RichEdit.rtfBox")

Malheureusement, j'obtiens un message d'erreur à la
création :
erreur 398 "Site client non disponible"

Apres qq recherches, je comprends que je fais appel à
UserControl lors de UserControl_InitProperties alors




qu'il
n'existe pas encore.
- UserControl.Ambient.UserMode
- UserControl.hwnd
- UserControl.Parent.hwnd

J'ai trouvé une explication indiquant qu'il est




necessaire
d'implémenter une interface IDispatch pour utiliser
createObject et donc rendre disponible l'acces à
UserControl lors de InitProperties.

"CreateObject call invokes CoCreateInstance with the
object's CLSID and requests a pointer to the object's
IDispatch interface."





(http://sern.ucalgary.ca/Courses/CPSC/547/W2000/webnotes/CO
M/COM.html)

Une méthode alternative fonctionne
set obj = Controls.Add("RichEdit.rtfBox","rtfName")
mais necessite de passer par l'objet OBJECT pour




manipuler
les méthodes et propriétés de l'ocx.
obj.object.text="hello"
alors que les methodes de base se trouvent toujours sous
obj :
obj.visible = true

Est ce que mes explications sont exactes ?
Comment modifier mon controle activex de facon a ce que




je
puisse en créer des instances dynamiquement avec
CreateObject ?
Utiliser une typelib OLE... Implémenter une gestion de
IDispatch... Autre chose...

Merci de votre réponse

LudoO




.



Avatar
Zoury
Salut LudoO!

un contrôle ne peut-être instancié que sur un formulaire... c'est pourquoi
tu es incapable de le créer avec CreateObject()..

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous