OLEObject
From Xojo Documentation
Supported Platforms Project Types: Desktop, Web Platforms: Windows |
Used to automate COM servers. Use the WordApplication, ExcelApplication, and PowerPointApplication classes to automate Microsoft Office applications. OLE is supported on the Windows platform only.
Events | |
|
Properties | |
|
Methods | ||||||
|
Constructors | |||
|
Notes
By default, OLEObject will make the property assignment by value. If it encounters an error it will try by reference if the property is an object. If the optional ByValue parameter is True, the property assignment is by value (i.e., a copy); otherwise the assignment is by reference (i.e., a pointer copy). In Visual Basic, an assignment by reference is done using the Set command, but since Xojo doesn't provide that feature, you will need to use the ByValue parameter when you know the assignment should be by reference.
Currency types are treated as String to preserve precision.
Since OLEObject uses Operator_Lookup, you can also use dot notation to access OLEProperties.
Sample Code
The following code automates Internet Explorer.
Var v As Variant
Var params(1) As Variant
obj = New OLEObject("InternetExplorer.Application", True)
obj.Value("Visible") = True
params(1) = "http://www.wikipedia.org/"
v = obj.invoke("Navigate", params)
Exception err As OLEException
MessageBox(err.Message)
The OLEObject class supports setting indexed properties. For example the Word.Document.Compatibility property is an indexed property. Here is an example.
Var doc As OLEObject
word.Visible = True
doc = word.Documents.Add
Var params(1) As Variant
params(1) = Office.wdNoTabHangIndent
doc.Value("Compatibility", params) = True
// or
// doc.Compatibility(Office.wdNoTabHangIndent)=True
The following code creates a copy of the passed OLEObject using the copy constructor and opens a new Word document.
Var wordCopy As OLEObject
wordCopy = New OLEObject(word)
wordCopy.Visible = True
wordCopy.Documents.Add
This code automates Microsoft Word.
Var docs As OLEObject
Var doc As OLEObject
Var range As OLEObject
Var v As Variant
obj = New OLEObject("Word.Application", True)
// make it visible
obj.Value("Visible") = True
v = obj.Value("Documents")
If v.ObjectValue IsA OLEObject Then
docs = OLEObject(v.ObjectValue)
v = docs.Invoke("Add")
If v.ObjectValue IsA OLEObject Then
doc = OLEObject(v.ObjectValue)
v = doc.Invoke("Range")
If v.ObjectValue IsA OLEObject Then
range = OLEObject(v.ObjectValue)
range.Value("Text") = "This is a sentence."
End If
End If
End If
Exception err As OLEException
MessageBox(err.Message)
This code shows how to get the MoviePlayer CurrentPosition using both dot notation and function calls:
Var v As Variant = o.Value("Controls")
If v IsA OLEObject Then
Var pos As Double = OLEObject(v).Value("CurrentPosition")
End If
And with dot notation:
Var pos As Double = MoviePlayer1.MovieController.Controls.CurrentPosition
Catch e As OLEException
MessageBox("OLE access error.")
End Try
See Also
ExcelApplication, Office, OLEContainer, OLEParameter, PowerPointApplication, WordApplication classes; OLEException error.