Create ActiveX instances at runtime??

I'd like to be able to create as many instances of an OCX as needed at runtime.

I did not write the OCX, and do not have the source code, although I am licensed to use it.

I'm trying to do something like this pseudo-code:
''''''''''''''''''''''''''''''
Dim ocxArray() as TheActiveX

Redim ocxArray(2)

ocxArray(0).Load "C:\myfile"
ocxArray(1).Load "C:\yourfile"
ocxArray(2).Load "C:\ourfile"

...etc....
''''''''''''''''''''''''''''''

I've tried "CreateObject":
Dim junk as Object
Set junk=CreateObject("TheActiveX")
but I get "Runtime error 429 ActiveX can't create object"

I've tried "Controls.Add"
Dim junk as Control
Set junk=Control.Add("TheActiveX", "myname")
but I get "Runtime error 711 Invalid class string Looking for object with ProgID TheActiveX"

Please provide actual working code, not links to someone else's answer.

Thanks.
LVL 1
wehoitAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
Erick37Connect With a Mentor Commented:
Place one instance of the OCX on your form and give it an Index of 0.  This creates a control array.  During run-time you can load new instances of the control by using the Load keyword.  Example follows:


'Loading new instances of a control at run-time
Dim i As Long

'Get the next index to load
i = TheOCX.UBound + 1

'Load a new instance of the OCX control
Load TheOCX(i)

TheOCX(i).Visible = True
TheOCX(i).Text = "TheOCX " & CStr(i)

'and so on...
0
 
tonsofpcsCommented:
If I remember right, its something like this:
Dim x as [activexobjectname]
Set x = New y
[use x]
Set x = Nothing
I'll give it a try when I get a chance and post back.  
0
 
JR2003Commented:
Try this example:
JR

Option Explicit
' If you are adding an ActiveX control at run-time that is
' not referenced in your project, you need to declare it
' as VBControlExtender.
Dim WithEvents ctlDynamic As VBControlExtender
Dim WithEvents ctlText As VB.TextBox
Dim WithEvents ctlCommand As VB.CommandButton

Private Sub ctlCommand_Click()
   ctlText.Text = "You Clicked the Command button"
End Sub

Private Sub ctlDynamic_ObjectEvent(Info As EventInfo)
   ' test for the click event of the TreeView
   If Info.Name = "Click" Then
      ctlText.Text = "You clicked " & ctlDynamic.object.selecteditem.Text
   End If
End Sub

Private Sub Form_Load()
   Dim i As Integer
   ' Add the license for the treeview to the license collection.
   ' If the license is already in the collection you will get
   ' the run-time error number 732.
   Licenses.Add "MSComctlLib.TreeCtrl"

   ' Dynamically add a TreeView control to the form.
   ' If you want the control to be added to a different
   ' container such as a Frame or PictureBox, you use the third
   ' parameter of the Controls.Add to specify the container.
   Set ctlDynamic = Controls.Add("MSComctlLib.TreeCtrl", _
                    "myctl", Form1)
   ' set the location and size of the control.
   ctlDynamic.Move 1, 1, 2500, 3500

   ' Add some nodes to the control.
   For i = 1 To 10
      ctlDynamic.object.nodes.Add Key:="Test" & Str(i), Text:="Test" _
                                        & Str(i)
      ctlDynamic.object.nodes.Add Relative:="Test" & Str(i), _
                           Relationship:=4, Text:="TestChild" & Str(i)
   Next i
   
   ' Make the control visible.
   ctlDynamic.Visible = True

   ' add a textbox
   Set ctlText = Controls.Add("VB.TextBox", "ctlText1", Form1)
   ' Set the location and size of the textbox
   ctlText.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
                 1, 2500, 100

   ' Change the backcolor.
   ctlText.BackColor = vbYellow

   ' Make it visible
   ctlText.Visible = True

   ' Add a CommandButton.
   Set ctlCommand = Controls.Add("VB.CommandButton", _
                    "ctlCommand1", Form1)

   ' Set the location and size of the CommandButton.
   ctlCommand.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
                    ctlText.Height + 50, 1500, 500

   ' Set the caption
   ctlCommand.Caption = "Click Me"

   ' Make it visible
   ctlCommand.Visible = True
End Sub

0
 
wehoitAuthor Commented:
Erick -
Works perfectly!
Thanks.

By the way - I have requested that you should be given partial credit for the other question of mine that you responded to.
http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/Q_21152405.html

I've posted newer code that's close to 100% accurate - if you want to try for the remaining points....

Again, thanks for a concise, accurate answer.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.