Ayuda con Listener - En Control TabPage

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

Ayuda con Listener - En Control TabPage

Notapor gustavodiaz00 » Lun Jun 05, 2017 1:39 am

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

Re: Ayuda con Listener - En Control TabPage

Notapor gustavodiaz00 » Dom Jun 11, 2017 4:00 am

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   Expandir vistaContraer vista
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   Expandir vistaContraer vista
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) 85 veces
LibreOffice 6.1 en KDE Neon
Avatar de Usuario
gustavodiaz00
 
Mensajes: 50
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

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

Notapor mauricio » Dom Jun 11, 2017 4:31 am

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
mauricio
 
Mensajes: 5827
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Ayuda con Listener - En Control TabPage

Notapor gustavodiaz00 » Mar Jul 11, 2017 6:29 pm

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


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: cibergalo y 3 invitados