Pagina 1 di 1

Assegnare Evento da macro

Inviato: sabato 17 gennaio 2015, 0:55
da kapello
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:

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

Funziona tutto per benino, se provo a verificare la registrazione dell’evento con la chiamata a
oForm.getScriptEvents(0)
mi trova l’evento:

Codice: Seleziona tutto

AddListenerParam          string                                      ""   
EventMethod               string                               "changed"   
ListenerType              string                       "XChangeListener"   
ScriptCode                string                                   <...>   
ScriptType                string                             "StarBasic"   
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.

Re: Assegnare Evento da macro

Inviato: sabato 17 gennaio 2015, 14:22
da kapello
Ci sono arrivato. Dovevo cambiare la voce
oControl = oDoc.CreateInstance("com.sun.star.form.component.FormattedField")
con
oControl = oDoc.CreateInstance("com.sun.star.form.component.TextField")
evidentemente il tipo di evento non era compatibile.
Ma ci sono arrivato dopo mille peripezie e... per tentativi. Possibile che non esista nella documentazione una pagina che dica con quali eventi sono compatibili quali controlli?
Qui c’è da uscire pazzi...