[Resuelto] macro para crear botones

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
anersan
Mensajes: 41
Registrado: Vie Ene 18, 2013 8:38 pm

[Resuelto] macro para crear botones

Mensaje por anersan »

Hola,

El título que me hubiera gustado poner era : " Macro para crear botones que antes no estaban, y que a su vez ejecutan otras macros"
Pero es demasiado largo.

Me gustaría hacer una macro para realizar una tarea cada vez que la ejecuto con un botón, por ejemplo escribir un número aleatorio en una celda y luego otro número en la celda inferior (la tarea es lo de menos).
Pero a la vez me gustaría que, al lado del número que se acaba de escribir, aparezca un botón "borrar", que me permita borrar el número y al botón mismo.

A ver si me explico, después de ejecutar la macro 10 veces se habrían escrito 10 números y se habrían creado 10 botones "borrar" al lado de cada número.
Lo de escribir los números no es problema.
Y lo de que al darle al botón "borrar", se borre hasta el propio botón, ya lo he descubierto por casualidad mientras trasteaba con las autoformas.

¿¿pero cómo se hace para que se creen los 10 botones que antes no estaban?? ¿Alguien podría darme un ejemplo o decirme dónde lo puedo encontrar??

Muchas gracias!
Última edición por anersan el Lun Feb 18, 2013 7:35 am, editado 1 vez en total.
Libre Office 3 en Ubuntu 12.04
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: macro para crear botones

Mensaje por mauricio »

Como crear botones lo puedes ver en mi libro: http://forum.openoffice.org/es/forum/vi ... =50&t=1545

pero no alcanzo a comprender para que lo usaras... por tus comentarios: (la tarea es lo de menos)... parece como que solo estuvieses practicando...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
anersan
Mensajes: 41
Registrado: Vie Ene 18, 2013 8:38 pm

[Resuelto] macro para crear botones

Mensaje por anersan »

Hola Mauricio,

Gracias por tu respuesta.
Si no me equivoco se trata del tema 7 de tu libro, al cual aún no había llegado, jejeje.

Efectivamente, soy un novato de las macros pero les he cogido gusto muy rápido.
Así que me pongo ejercicios para practicar y aprender su funcionamiento y lógica, a veces endemoniados ;)

A ver si consigo hacer lo que me propongo en este caso y lo pongo a continuación como ejemplo para el que le pueda servir

Un saludo
Libre Office 3 en Ubuntu 12.04
Avatar de Usuario
anersan
Mensajes: 41
Registrado: Vie Ene 18, 2013 8:38 pm

Re: macro para crear botones

Mensaje por anersan »

Hola,

A pesar de mi insistencia, pero ando algo perdido.

He escrito el código para crear un botón con etiqueta "Mensaje", en el formulario, posición y tamaño deseados, según el tema 7 del libro (capítulo 7.6)
Lo que me gustaría es que al pulsar ese botón, apareciera el mensaje "hola Andrés". Luego me he ido al capítulo 9 "eventos" pero no doy con la respuesta.
En el código de más abajo debe faltar algún paso para poder asociar el botón con la tarea que quiero. Será sin duda algo evidente, pero no veo por dónde echarle mano...

Alguien me podría echar un cable??

Gracias

___________________


Sub BotonComando1()

Dim oFormulario As Object
Dim oBotonComando As Object
Dim oBotonComandoModelo As Object
oFormulario = ThisComponent.getCurrentController.getActiveSheet._
getDrawPage.getForms.getByName( "MiDirectorio" )

'Creamos una nueva forma de control
oBotonComando = ThisComponent.createInstance("com.sun.star.drawing.ControlShape")

'Cambiamos su tamaño y posicion
Call CambiaTam( oBotonComando, 800, 2400 )
Call CambiaPos( oBotonComando, 800, 2400 )

'Creamos un nuevo botón de comando
oBotonComandoModelo = ThisComponent.createInstance("com.sun.star.form.component.CommandButton")
'Establecemos su nombre
oBotonComandoModelo.Name = "cmdMsg"
oBotonComandoModelo.Label = "Mensaje"
'Conectamos la forma con el nuevo control
oBotonComando.Control = oBotonComandoModelo

'Lo agregamos al formulario
oFormulario.insertByIndex(0, oBotonComandoModelo)

'Agregamos la forma a la página de dibujo para que sea visible
ThisComponent.getCurrentController.getActiveSheet.getDrawPage.add( oBotonComando )

' Ahora es cuando intento asignar un código al botón que se ha creado, pero no funciona :( "Variable de objeto no establecida"
oBotonComando=Source.getModel
oBotonComando = MsgBox("Hola Andrés")


End Sub
Libre Office 3 en Ubuntu 12.04
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: macro para crear botones

Mensaje por fornelasa »

Hola...
Según yo anersan , está consulta involucra un desarrollo de código muy amplio, no sé si los foristas tengan tiempo de hacerlo.
En una columna con un ancho de 3 centímetros y filas de 0.50 centímetros, aquí un ejemplo de como hacerlo:
Pulsa por favor el rectángulo azul y miremos lo que pasa.
Insisto, es un ejemplo que puedes adaptar a tus necesidades.

Funciona para OpenOffice 3.4.1

anersan, creo que tienes mucha tarea por hacer, :lol:

Saludos, Federico.
Adjuntos
Botones.ods
Crear Botones y Asignar Tareas.
(9.44 KiB) Descargado 664 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
anersan
Mensajes: 41
Registrado: Vie Ene 18, 2013 8:38 pm

Re: macro para crear botones

Mensaje por anersan »

Bufff,
Ahora entiendo las risas. Me temo que será un poco más difícil de lo que pensaba.
Pero efectivamente algo así es lo que andaba buscando.

Muchas gracias Federico.

Voy a trabajar en ello y a ver hasta dónde soy capaz de llegar...
Libre Office 3 en Ubuntu 12.04
Avatar de Usuario
anersan
Mensajes: 41
Registrado: Vie Ene 18, 2013 8:38 pm

Re: macro para crear botones

Mensaje por anersan »

Hola,

He destripado un poco tu código para hacer que genere un sólo botón, así me es más fácil entender cómo funciona.

Hay cosas que desconozco por completo, por ejemplo:
sScriptURL = "vnd.sun.star.script:" & ButtonScriptStr & "?language=Basic&location=document"

o todas la propiedades del evento
With aEvent
.AddListenerParam = ""
.EventMethod = "actionPerformed"
.ListenerType = "XActionListener"
.ScriptCode = sScriptURL
.ScriptType = "Script"
End With

Y otras sólo las desconozco un poco :lol:

Sin saber exactamente cómo, mi versión simplificada de tu código funciona.
Mi objetivo ahora es escribir un código para cualquier número de botones, mediante un comando 'for' o algo así.
En tu ejemplo, ya se sabía de antemano que se generarían 7 botones.

Bueno, de nuevo gracias. Ahora ya tengo con qué entretenerme, jeje
Adjuntos
Botones2.ods.tar.gz
(9.11 KiB) Descargado 352 veces
Libre Office 3 en Ubuntu 12.04
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: macro para crear botones

Mensaje por fornelasa »

Hola...
Que bien que ya se pudo generar un único botón pero......... el código "rasurado" no podrá servir mas que para un solo botón.
Como hemos notado esto involucra un código muy grande y ademas para hacerlo a la medida se necesita saber exactamente que se desea hacer y requiere de tiempo que a lo mejor no se tiene por parte del forista.
Quiero que cada que pulse el botón "Generar botones" se me genere un nuevo botón y se le asigne también una tarea determinada.
Este archivo lo hace para 7 botones, (puedes hacerlo editando el código para 10 botones o para 100 o para 1000).

La columna A y B tienen un ancho de 3 centímetros, las filas de 0.50 centimetros

Nota: Además en la forma en que has dejado el código en tu ultimo post, cada que pulsas Generar botones te genera el mismo botón, uno encima del otro.

Saludos, Federico.
Adjuntos
Botones7.ods
Genera 7 botones
(9.51 KiB) Descargado 364 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
anersan
Mensajes: 41
Registrado: Vie Ene 18, 2013 8:38 pm

[Resuelto] Re: macro para crear botones

Mensaje por anersan »

Hola Federico,

Me siento realmente privilegiado de acaparar la atención de alguien tan experimentado.
De nuevo te doy las gracias por tu tiempo.

Creo que antes publiqué una versión un poco rudimentaria de la macro.
Lo que realmente quería hacer, y que por fin he conseguido, es lo del fichero adjunto.

Al pulsar el botón "Principal", se te piden el número de filas y de columnas.
De forma que se genera una matriz de botones. Puede ser una matriz de 2x2, o de 50x50.
Al pulsar sobre cada uno de esos botones aparece un simple mensaje. Pero en realidad ya se puede ejecutar cualquier macro que se escriba en la Sub "button(Evento)". Ahora, por ejemplo, intentaré que al pulsar sobre un botón se despligue un cuadro de diálogo que me permita borrar ese botón.

Lo más difícil era el paso de asociar un botón, que se crea a partir de código, con una macro, sin pasar por los menús gráficos. Lo que en tu caso era la función "AsignarTarea"

Ah, he tenido que hacer una modificación importante a tu código. Por alguna razón, cuando generaba la matriz de botones, sólo se le daba el nombre al primero. El resto de botones recibían el nombre que OOo da por defecto. Era un poco extraño. Al final he declarado el nombre de cada botón como una variable private, así que la puedo llamar desde donde quiera.

Un saludo
Adjuntos
Botones2.ods
(11.53 KiB) Descargado 492 veces
Última edición por anersan el Lun Feb 18, 2013 7:34 am, editado 1 vez en total.
Libre Office 3 en Ubuntu 12.04
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: macro para crear botones

Mensaje por fornelasa »

Hola anersan,
Has comentado:
Lo que realmente quería hacer, y que por fin he conseguido, es lo del fichero adjunto.
La verdad se aprecia trabajo de tu parte en el archivo, ¡excelente¡, se ve muy bien, gracias por compartirlo. :super:

Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Responder