Página 1 de 1

Ayuda con Listener - En Control TabPage

Publicado: Lun Jun 05, 2017 1:39 am
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

Re: Ayuda con Listener - En Control TabPage

Publicado: Dom Jun 11, 2017 4:00 am
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 194 veces

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

Publicado: Dom Jun 11, 2017 4:31 am
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

Ayuda con Listener - En Control TabPage

Publicado: Mar Jul 11, 2017 6:29 pm
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.