Ayuda con Listener - En Control TabPage

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
gustavodiaz00
Mensajes: 64
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Ayuda con Listener - En Control TabPage

Mensaje por gustavodiaz00 »

Tengo este codigo y estoy intentando colocarle un listener al boton pero todas las pruebas que hice no me resultaron, ya he navegado por un monton de paginas y foros pero no me puedo dar cuenta de como son las jerarquias para colocar un listener y como debo hacerlo para capturar los eventos de los controles dentro del tabPage. Por fabor si alguien puede ayudarme se los agradecería eternamente.

Código: Seleccionar todo

REM  *****  BASIC  *****

Sub tab_1
 DialogLibraries.loadLibrary("Standard")
 
 oDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
 oDialogModel = oDialog.getModel()
 
 ' tab container
 oTabModel = oDialogModel.createInstance(_
   "com.sun.star.awt.tab.UnoControlTabPageContainerModel")
 
 oDialogModel.insertByName("tab", oTabModel)
 oTabModel.setPropertyValues(Array("Height", "PositionX", "PositionY", "Width"), _
     Array(130, 10, 10, 140))
 
 ' page 1
 oPage1 = oTabModel.createTabPage(1)
 oPage1.Title = "Page 1"
 oTabModel.insertByIndex(0, oPage1)
 'oPage1.ImageURL = "file:///home/hoge/Documents/images/icons/up.png"
 'oPage1.Tooltip = "page"
 'oPage1.Enabled = False
 
 oEdit = oPage1.createInstance("com.sun.star.awt.UnoControlEditModel")
 oEdit.setPropertyValues(Array("Height", "PositionX", "PositionY", "Width"), _
     Array(12, 5, 5, 100))
 oPage1.insertByName("edit", oEdit)
 oEdit.Text = "Page 1"
 
 ' page 2
 oPage2 = oTabModel.createTabPage(2)
 oPage2.Title = "Page 2"
 oTabModel.insertByIndex(1, oPage2)
 
 oButton = oPage2.createInstance("com.sun.star.awt.UnoControlButtonModel")
 oButton.setPropertyValues(Array("Height", "PositionX", "PositionY", "Width"), _
     Array(13, 5, 5, 35))
 oPage2.insertByName("button", oButton)
 oButton.Label = "Button"
 
 oDialog.getControl("tab").ActiveTabPageID = 1
 
 oDialog.execute()
 oDialog.dispose()
End Sub
Última edición por gustavodiaz00 el Mié Jul 12, 2017 4:57 am, editado 4 veces en total.
LibreOffice 6.1 en KDE Neon
Avatar de Usuario
gustavodiaz00
Mensajes: 64
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Re: Ayuda con Listener - En Control TabPage

Mensaje por gustavodiaz00 »

Solucionado

Después de mucha búsquedas encontré un ejemplo en el foro de openoffice en alemán.
Para acceder al control dentro del tab debo usar oDialog.getControl("tab").getControl(0).getByIdentifier(0). Donde Odialog es la vetana, GetControl("tab") es el contenedor de las pestañas, getControl(0) hace referencia a la primer pestaña y getByIdenttifier(0) es el primer control insertado en el tab.

Luego lo asignamos a un objeto y luego podemos asignarle el listener.
Si copian el código recuerden que necesitan crear un dialogo vacío.

Código: Seleccionar todo

Dim myBtn3 As Object
myBtn3=oDialog.getControl("tab").getControl(0).getByIdentifier(0)
myBtn3.addMouseListener(MouseClick)
Acá dejo el código completo para que otros lo puedan usar y modificar

Código: Seleccionar todo

REM  *****  BASIC  *****

Sub tab_1
DialogLibraries.loadLibrary("Standard")

oDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
oDialogModel = oDialog.getModel()

' tab container
oTabModel = oDialogModel.createInstance(_
   "com.sun.star.awt.tab.UnoControlTabPageContainerModel")

oDialogModel.insertByName("tab", oTabModel)
oTabModel.setPropertyValues(Array("Height", "PositionX", "PositionY", "Width"), _
     Array(130, 10, 10, 140))

' page 1
oPage1 = oTabModel.createTabPage(1)
oPage1.Title = "Page 1"
oTabModel.insertByIndex(0, oPage1)
'oPage1.ImageURL = "file:///home/hoge/Documents/images/icons/up.png"
'oPage1.Tooltip = "page"
'oPage1.Enabled = False

oEdit = oDialogModel.createInstance("com.sun.star.awt.UnoControlEditModel")
	with oEdit
		.setPropertyValue("Name", "Edit1")
		.setPropertyValue("TabIndex", 4)
		.setPropertyValue("PositionX", 5)
		.setPropertyValue("PositionY", 5)
		.setPropertyValue("Width", 100)
		.setPropertyValue("Height", 12)
		.setPropertyValue("Text", "Edit page 1")
	End With
oPage1.insertByName("EditText", oEdit)

' page 2
oPage2 = oTabModel.createTabPage(2)
oPage2.Title = "Page 2"
oTabModel.insertByIndex(1, oPage2)

oButton = oPage2.createInstance("com.sun.star.awt.UnoControlButtonModel")
	with oButton
		.setPropertyValue("Name", "Boton")
		.setPropertyValue("TabIndex", 1)
		.setPropertyValue("PositionX", 5)
		.setPropertyValue("PositionY", 5)
		.setPropertyValue("Width", 35)
		.setPropertyValue("Height", 13)
		.setPropertyValue("Label", "Boton 1")
		.setPropertyValue("PushButtonType",com.sun.star.awt.PushButtonType.CANCEL)
	End With
oPage2.insertByName("button", oButton)

oDialog.getControl("tab").ActiveTabPageID = 1

MouseClick = CreateUnoListener( "MouseClick_", "com.sun.star.awt.XMouseListener" )

Dim myBtn3 As Object
myBtn3=oDialog.getControl("tab").getControl(0).getByIdentifier(0)
myBtn3.addMouseListener(MouseClick)

Dim myBtn4 As Object
myBtn4=oDialog.getControl("tab").getControl(1).getByIdentifier(0)
myBtn4.addMouseListener(MouseClick)

oDialog.execute()
oDialog.dispose()
End Sub

Sub MouseClick_mousePressed(oEvent)
Dim Ctrl_Evento as String
   Ctrl_Evento = oEvent.Source.Model.Name
   msgbox  Ctrl_Evento
End Sub

Sub MouseClick_mouseReleased(oEv)
End Sub

Sub MouseClick_mouseEntered(ev)
End Sub

Sub MouseClick_mouseExited(ev)
End Sub

Sub MouseClick_disposing(ev)
End Sub
Dialogos_multipage_OK.ods
(10.41 KiB) Descargado 190 veces
LibreOffice 6.1 en KDE Neon
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Ayuda con Listener - En Control TabPage

Mensaje por mauricio »

Gracias por compartir la solución... esto es buen candidato para agregar a EasyDev, muy similar a un RoadMap: http://easydev.readthedocs.io/en/latest ... ml#roadmap

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
gustavodiaz00
Mensajes: 64
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Ayuda con Listener - En Control TabPage

Mensaje por gustavodiaz00 »

Hola mauricio estaba revisando el código y en libreoffice no funciona. Solamente en AOO, lo estuve puliendo un poco y logré hacerlo funcionar a medias

Código: Seleccionar todo

REM  *****  BASIC  *****

Sub tab_1
DialogLibraries.loadLibrary("Standard")

oDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
oDialogModel = oDialog.getModel()

dim oTabModel as Object	
	oTabModel = oDialogModel.CreateInstance("com.sun.star.awt.tab.UnoControlTabPageContainerModel")
	oTabModel.Name = "Tab"
	oTabModel.PositionX = 6
	oTabModel.PositionY = 20
	oTabModel.Width = 145
	oTabModel.Height = 100
	oTabModel.TabIndex = 2
	oTabModel.border = 1
	oTabModel.Backgroundcolor =  RGB(200,200,250)
	
oDialogModel.insertByName("tab", oTabModel)

dim args() 

	args = Array(1)
Dim tabPageModel1 as Object
    tabPageModel1 = oDialogModel.createInstance("com.sun.star.awt.tab.UnoControlTabPageModel")
    tabPageModel1.initialize(args)
    tabPageModel1.Title = "Tab 1"
    tabPageModel1.Name = "Tab1"
    'tabPageModel1.ImageURL = "file:///home/gustavo/Imágenes/logo.png"
	
	args = Array(2)
Dim tabPageModel2 as Object
    tabPageModel2 = oDialogModel.createInstance("com.sun.star.awt.tab.UnoControlTabPageModel")
    tabPageModel2.initialize(args)
    tabPageModel2.Title = "Tab 2"
    tabPageModel2.Name = "Tab2"

oTabModel.insertByIndex(0, tabPageModel1)
oTabModel.insertByIndex(1, tabPageModel2)

Dim oButton As Object

oButton = tabPageModel1.CreateInstance("com.sun.star.awt.UnoControlButtonModel")
          tabPageModel1.PositionX = 20
          tabPageModel1.PositionY = 20
          tabPageModel1.Width = 50
          tabPageModel1.Height = 12
          tabPageModel1.TabIndex = 0

 
'tabPageModel1.insertByName("Salir", oButton)


oDialog.getControl("tab").ActiveTabPageID = 1

oDialog.execute()
oDialog.dispose()
End Sub
Cuando llego a tabPageModel1.insertByName("Salir", oButton) me pone un error

Error de ejecución de BASIC.
Se ha producido una excepción
Type: com.sun.star.beans.UnknownPropertyException
Message: .

Si encontré otro código que hace lo mismo funciona LibreOffice aunque este no funciona en OpenOffice

Código: Seleccionar todo

Sub CreateTab2
  dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
  model = dlg.getModel()
  
  tab_model = model.createInstance("com.sun.star.awt.UnoMultiPageModel")
  With tab_model
    .PositionX = 5
    .PositionY = 5
    .Width = 150
    .Height = 110
  End With
  
  model.insertByName("tab", tab_model)
    
  tab1 = dlg.getControl("tab")
  
  Dim args As New com.sun.star.beans.NamedValue
  
  args.Name = "Title"
  args.Value = "Page 1"
  tab1_model = tab1.getModel()
  page_model = tab1_model.createInstance("com.sun.star.awt.UnoPageModel")
  tab1_model.insertByName("page1", page_model)
  n = UBound(tab1_model.getElementNames())
  tab1.setTabProps(n+1, Array(args))
  page_model1 = page_model
  
  
  args.Name = "Title"
  args.Value = "Page 2"
  tab2_model = tab1.getModel()
  page_model = tab2_model.createInstance("com.sun.star.awt.UnoPageModel")
  tab2_model.insertByName("page2", page_model)
  n = UBound(tab2_model.getElementNames())
  tab1.setTabProps(n+1, Array(args))
  page_model2 = page_model
  
  
  btn_model = page_model1.createInstance("com.sun.star.awt.UnoControlButtonModel")
  With btn_model
    .PositionX = 10
    .PositionY = 10
    .Width = 30
    .Height = 15
    .Label = "btn 1"
  End With
  page_model1.insertByName("btn", btn_model)
  
  dlg.execute()
  dlg.dispose()
End Sub
La pregunta básicamente es si hay alguna forma de modificar el primer código para que funcione indistintamente en cualquiera de las dos suits.

Desde ya agradezco cualquier aporte que puedan hacer.
LibreOffice 6.1 en KDE Neon
Responder