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]

Reply via email to