Assegnare Evento da macro
Inviato: sabato 17 gennaio 2015, 0:55
Ciao, ragazzi.
Come da titolo, non riesco ad assegnare un evento a un controllo da macro.
La mia intenzione è di creare un formulario da zero (tramite macro), ma non rieco a superare questo scoglio.
Seguendo i vari forum e guide sono arrivato a scrivere il seguente codice:
Funziona tutto per benino, se provo a verificare la registrazione dell’evento con la chiamata a
oForm.getScriptEvents(0)
mi trova l’evento:
e credo che sia corretto, ma all’atto pratico l’evento non viene attivato.
Se qualcuno sapesse indicarmi dove sbaglio gliene sarei davvero grato, perché ci ho sclerato sopra già parecchie ore e sono bloccato.
Come da titolo, non riesco ad assegnare un evento a un controllo da macro.
La mia intenzione è di creare un formulario da zero (tramite macro), ma non rieco a superare questo scoglio.
Seguendo i vari forum e guide sono arrivato a scrivere il seguente codice:
Codice: Seleziona tutto
Const cUltraLight = &HF2EFE2
Const bkColorCasel = cUltraLight
Const Scale = 600
Function CreatePoint(xPos, YPos) as New com.sun.star.awt.Point
Dim oPoint as New com.sun.star.awt.Point
oPoint.X = xPos * Scale + Int(Scale/5)
oPoint.Y = yPos * Scale + Int(Scale/5)
CreatePoint() = oPoint
End Function
Function CreateSize(iWidth, iHeight) As New com.sun.star.awt.Size
Dim oSize As New com.sun.star.awt.Size
oSize.Width = (iWidth * Scale) - Int(Scale/5)
oSize.Height = (iHeight * Scale) - Int(Scale/5)
CreateSize() = oSize
End Function
Sub createTextField(oDoc, oDBForm, index, Data, dimX, dimY, posX, posY)
Dim oControl
Dim oShape
Dim lAnchor As Long
lAnchor = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
oControl = oDoc.CreateInstance("com.sun.star.form.component.FormattedField")
oControl.BackgroundColor = bkColorCasel
oControl.Border = 1
oControl.DataField = Data
oControl.HideInactiveSelection = True
oControl.Name = "txt_"+Data
oDBForm.insertByIndex(index, oControl)
Rem Questa è la parte di codice che dovrebbe assegnare l’evento
Dim oEvent as new com.sun.star.script.ScriptEventDescriptor
oEvent.ListenerType = "com.sun.star.form.XChangeListener"
' oEvent.ListenerType = "XChangeListener"
oEvent.EventMethod = "changed"
oEvent.ScriptType = "StarBasic"
' oEvent.ScriptType = "Basic"
Rem La macro è sita nella libreria BookWorker, modulo Eventi, locazione Macro personali
oEvent.ScriptCode = "application:BookWorker.Eventi.OnModified"
oDBForm.registerScriptEvent(index, oEvent)
oShape = oDoc.CreateInstance("com.sun.star.drawing.ControlShape")
oShape.Size = createSize(dimX, dimY)
oShape.Position = createPoint(posX, posY)
oShape.AnchorType = lAnchor
oShape.control = oControl
oDoc.Drawpage.Add(oShape)
End Sub
Sub AddForm
' create a new writer document
Dim oDoc as Object
Dim oEmptyArgs() as new com.sun.star.beans.PropertyValue
oDoc = StarDesktop.LoadComponentFromURL( "private:factory/swriter", "_blank", 0, oEmptyArgs )
Erase oEmptyArgs
' create a new logical form
Dim oFormsCollection as Object
oFormsCollection = oDoc.DrawPage.Forms
Dim oForm as Object
oForm = createUnoService( "com.sun.star.form.component.DataForm" )
oFormsCollection.insertByName( "Entita", oForm )
Rem Creazione delle caselle
createTextField(oDoc, oForm, 0, "ID_ENTITA", 8, 1, 4, 0)
createTextField(oDoc, oForm, 1, "ID_ENTITA_TIPO", 8, 1, 4, 1)
End Sub
oForm.getScriptEvents(0)
mi trova l’evento:
Codice: Seleziona tutto
AddListenerParam string ""
EventMethod string "changed"
ListenerType string "XChangeListener"
ScriptCode string <...>
ScriptType string "StarBasic"
Se qualcuno sapesse indicarmi dove sbaglio gliene sarei davvero grato, perché ci ho sclerato sopra già parecchie ore e sono bloccato.