Hi there, I have a problem with creating a commandbutton using macro and
then attaching an event to this button. (OOo 2.0.4, windows 2000)
I have tried several methods but they all end up not working as I want
them to.
the basic function I'm using looks like the following.
it is only the part [ATTACH_MACRO HERE] that changes for each attempt to
get it working. (Obs there might be typing errors in the below code,
just ignore those I'm manuyally copying this)
Sub createButton(sText, sName, sTag, oCursor, optional macro, optional
oDocument)
if isMissing(oDocument) Then
oDocument = ThisComponent
end if
Dim button, shape, drawpage
Dim oSize as new com.sun.star.awt.size
Dim oPosition as new com.sun.star.point
button = createUnoService("com.sun.star.form.component.CommandButton")
button.Label = sText
button.Enabled = True
button.Printable = False
button.Name = sName
button.Tag = sTag
shape = oDocument.createInstance("com.sun.star.drawing.ControlShape")
oSize.Height = 1000
oSize.Width = 3000
oPosition.X = 0
oPosition.Y = 0
shape.setSize(oSize)
shape.setPosition(oPosition)
shape.LayerName = "Controls"
shape.setAnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
shape.setControl(button)
shape.attach(oCursor)
if (!isEmpty(macro)
[ATTACH MACRO_HERE]
end if
End Sub
My first attempt was attaching an actionListener by using the following code
----------------------------------
Dim oListener
oListener = CreateUnoListener( macro,
"com.sun.star.awt.XActionListener")
oDocument.CurrentController().getControl(button).addActionListener(
oListener )
----------------------------------
( macro = "doStuff_" and there exist a function called
"doStuff_actionPerformed")
and this works, as long as I do not save the document, close it and
reopen the document, then the button will not work anymore.
that is it only works as long as I have the document opened.
When looking at the formcontrol editor I cannot see any events attached
to the control at any time (before I close and after I open)
my next attempt was to use the registerScriptEvent
----------------------------------
Dim id,form
Dim oEvent as new com.sun.star.script.ScriptEventDescriptor
oEvent.ListenerType = "com.sun.star.awt.XActionListener"
oEvent.EventMethod = "actionPerformed"
oEvent.ScriptType = "Basic"
oEvent.ScriptCode = "document:"+macro
form = oDocument.DrawPage.getForms().getByIndex(0)
id = form.getCount() -1
form.registerScriptEvent(id,oEvent)
----------------------------------
(macro = "Standard.Module1.doStuff" and there exist a function called
doStuff)
and this also works, but only as long as _I have the document opened, if
I save/close/reopen, this does not work anymore.
When looking at the formcontrol editor I now cann see the event attached
to the control both before the save and after the save, but looking at
the "text" that is written in that event, it states the exact same
string as I wrote in, but this type of string does not match hte type of
string that gets written if I attach the event manually.
"document:Standard.Module1.doStuff" compared to
"vnd.sun.star.script:Standard.Module1.doStuff?language=Basic&location=document"
my 3rd and last attempt to attachthe macro was the same as the
registerScriptEvent, but instead of using
oEvent.ScriptCode = "document:"+macro
I used
oEvent.ScriptCode =
"vnd.sun.star.script:"+macro+"?Language=Basic&Location=document"
ie the same code that the form editor puts in there.
but to my surprise, this did not work at all, not before the save/close
and not after the reopen..
I'm going to test more about this, but please if anyone could help me
getting this working I'd appreciate it..
--
Christian Andersson - [EMAIL PROTECTED]
Configuration and Collaboration for OpenOffice.org
Open Framework Systems AS http://www.ofs.no
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]