[RESUELTO]-Agregar un evento a un control en tiempo de ejecu

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
bcf179e
Mensajes: 9
Registrado: Mié Mar 09, 2016 7:33 pm

[RESUELTO]-Agregar un evento a un control en tiempo de ejecu

Mensaje por bcf179e »

Hola,

He aqui una imagen con lo que yo quiero.
image1_opt.png
image1_opt.png (22.69 KiB) Visto 1818 veces
En la imagen precedente los dos LB que estan en arriba a la derecha fueron agregados en modo Diseno para poder verificar el buen funcionamiento de la macro MAJGroupes. Lo que yo quiero es lo siguiente. «Coger » un nombre del LB que esta a la izquierda y cuando hago clic en uno de los LB de la derecha que el actualiza ese LB, agregando ese nombre y tambien la BD. Cuando yo lo hago funciona con esos dos LB de la derecha.

Ahora lo que quiero es usar el boton para agregar dinamicamente LB y que estos tengan el mismo comportamiento que los que agregue en modo Diseno. O sea, necesito agregar un evento en tiempo de ejecucion.

El error que me da es el siguiente :
image2_opt.png
image2_opt.png (26.49 KiB) Visto 1818 veces
Pero el LB es agregado.

Alguien puede ayudarme por favor ???

Gracias de ante mano.
Última edición por bcf179e el Mar Mar 15, 2016 8:45 pm, editado 1 vez en total.
LibreOffice 4 en Ubuntu
bcf179e
Mensajes: 9
Registrado: Mié Mar 09, 2016 7:33 pm

Re: [Base]-Agregar un evento a un control en tiempo de ejecu

Mensaje por bcf179e »

Codigo de la macro:

Código: Seleccionar todo

Sub NouveauGroupe(oEvent as object)
Dim Context as object
Dim oParent as object
Dim DB as object
Dim Conn as object
Dim Stmt as object
Dim strSQL as String
Dim ResultSet as object
Dim oForm_Liste_GROUPE As Object
Dim Groupe_ListBox As Object
Dim maFormListBox as Object
Dim nb_ctrl as Integer

	oParent = oEvent.Source.Model.Parent

	Context = CreateUnoService("com.sun.star.sdb.DatabaseContext")
	DB = Context.getByName("prueba")
	Conn = DB.getConnection("","")
	Stmt = Conn.createStatement()
	
	strSQL = "select max(""id"") from groupe"
	ResultSet = Stmt.executeQuery(strSQL)
	
	ResultSet.next
	
	qteGroupes = ResultSet.getString(1)
	
	qteGroupes = qteGroupes + 1
	
	strSQL = "insert into ""groupe"" (""id"", ""groupe"") values (" & qteGroupes & ", 'Groupe" & qteGroupes & "')" 
	Stmt.executeQuery(strSQL)

	'Creamos una nueva forma de control
	oForm_Liste_GROUPE = ThisComponent.createInstance("com.sun.star.drawing.ControlShape")
	oForm_Liste_GROUPE.Name = "Form_GROUPE" & qteGroupes
	
	'Cambiamos su tamaño y posicion
	Call CambiaTam( oForm_Liste_GROUPE, 5000, 5000 )
	Call CambiaPos( oForm_Liste_GROUPE, 3000, 10000 )
	
	'Creamos un nuevo cuadro de lista
	Groupe_ListBox = ThisComponent.createInstance("com.sun.star.form.component.ListBox")
	
	'Establecemos su nombre
	Groupe_ListBox.Name = "Groupe" & qteGroupes
	
	'Conectamos la forma con el nuevo control
	oForm_Liste_GROUPE.Control = Groupe_ListBox
	
	'Agregamos la forma a la página de dibujo para que sea visible
	thiscomponent.DrawPage.add( oForm_Liste_GROUPE )
	
	maFormListBox = ThisDataBaseDocument.FormDocuments.GetByName("Form_GROUPE1")
	
'	nb_ctrl = maFormListBox.count
'	MsgBox nb_ctrl
 '  	For i = 0 to nb_ctrl-1
  ' 		Assigner_macro_controle (maFormListBox, i)
   '	next i
End Sub

Sub Assigner_macro_controle(oForm as object, index as long)
dim oEvent as new com.sun.star.script.ScriptEventDescriptor
dim struct()
	'if (ubound(struct) > -1) then
    '	Supprimer l'assignation au script
    '  	oForm.revokeScriptEvents(index)
   	'end if

   	oEvent.ListenerType = "com.sun.star.awt.XMouseListener"
   	oEvent.EventMethod = "mousePressed"
   	oEvent.ScriptType = "StarBasic"
   	oEvent.ScriptCode = "Standard.Module1.MAJGroupes"

   	oForm.registerScriptEvent(index, oEvent)
end sub
LibreOffice 4 en Ubuntu
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: [Base]-Agregar un evento a un control en tiempo de ejecu

Mensaje por SLV-es »

Por favor, recorta un poco las imágenes y vuelve a subirlas, pues a ese tamaño quedan muy reducidas y no podemos ni distinguir el mensaje de error.
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
bcf179e
Mensajes: 9
Registrado: Mié Mar 09, 2016 7:33 pm

[RESUELTO]-Agregar un evento a un control en tiempo de ejecu

Mensaje por bcf179e »

Hola,

Finalmente he resuelto es problema.

Aqui les dejo el codigo en espera de que sea util para alguien.

Código: Seleccionar todo

Sub NouveauGroupe1(oEvent as object)
Dim oFormGroupes as Object
Dim oFormLabels as Object
Dim oNouveauFormControl as Object
Dim oNouveauLBModel as Object
Dim Context as object
Dim DB as object
Dim Conn as object
Dim Stmt as object
Dim strSQL as String
Dim ResultSet as object
Dim nb_ctrl as Integer
Dim i as Integer
Dim maFormListBox as Object
Dim oNuevaEtiqueta As Object
Dim oNuevaEtiquetaModelo As Object
	
	
	oFormGroupes = ThisComponent.DrawPage.Forms.getByName("MesGroupes")
	oFormLabels = ThisComponent.DrawPage.Forms.getByName("MesLabels")
	
	Context = CreateUnoService("com.sun.star.sdb.DatabaseContext")
	DB = Context.getByName("prueba")
	Conn = DB.getConnection("","")
	Stmt = Conn.createStatement()
	
	strSQL = "select max(""id"") from groupe"
	ResultSet = Stmt.executeQuery(strSQL)
	
	ResultSet.next
	
	qteGroupes = ResultSet.getString(1)
	
	qteGroupes = qteGroupes + 1
	
	strSQL = "insert into ""groupe"" (""id"", ""groupe"") values (" & qteGroupes & ", 'Groupe" & qteGroupes & "')" 
	Stmt.executeQuery(strSQL)
	
	oNouveauFormControl = ThisComponent.createInstance("com.sun.star.drawing.ControlShape")
			
	Call CambiaTam( oNouveauFormControl, 5000, 5000 )
	Call CambiaPos( oNouveauFormControl, 0, 1000 )
	
		oNouveauLBModel = ThisComponent.createInstance("com.sun.star.form.component.ListBox")
	oNouveauLBModel.Name = "Groupe" & qteGroupes
	
	oNouveauFormControl.Control = oNouveauLBModel
 	oFormGroupes.insertByIndex(0, oNouveauLBModel)
	ThisComponent.DrawPage.add( oNouveauFormControl )
	
	maFormListBox = ThisComponent.DrawPage.Forms.GetByName("MesGroupes")
	
	oNuevaEtiqueta = ThisComponent.createInstance("com.sun.star.drawing.ControlShape")
 
	Call CambiaTam( oNuevaEtiqueta, 2000, 1500 )
	Call CambiaPos( oNuevaEtiqueta, 0, 500 )
 
	oNuevaEtiquetaModelo = ThisComponent.createInstance("com.sun.star.form.component.FixedText")
	oNuevaEtiquetaModelo.Name = "Groupe" & qteGroupes
	oNuevaEtiquetaModelo.Label = "Groupe" & qteGroupes
	
	oNuevaEtiqueta.Control = oNuevaEtiquetaModelo
 
	oFormLabels.insertByIndex(0, oNuevaEtiquetaModelo)
 
	ThisComponent.DrawPage.add( oNuevaEtiqueta )  
	
	Assigner_macro_controle (maFormListBox, 0)	
End Sub
Y...

Código: Seleccionar todo

Sub Assigner_macro_controle(oForm as object, index as long)
dim oEvent as new com.sun.star.script.ScriptEventDescriptor

   	oEvent.ListenerType = "com.sun.star.awt.XMouseListener"
   	oEvent.EventMethod = "mousePressed"
   	oEvent.ScriptType = "StarBasic"
   	oEvent.ScriptCode = "Standard.Module1.MAJGroupes"

   	oForm.registerScriptEvent(index, oEvent)
end sub
Gracias a todos.
LibreOffice 4 en Ubuntu
Responder