[RESUELTO] Enviar foco a un marcador

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Donilo
Mensajes: 14
Registrado: Jue May 13, 2010 11:54 am

[RESUELTO] Enviar foco a un marcador

Mensaje por Donilo »

Estoy trabajando con OpenOffice Writer, ¿se puede hacer una macro que envie el "foco" a un marcador?

Ya tengo terminada la macro que hace salto de pagina e inserta un documento, pero el (puntero, cursor, foco), no se como lo llamais, se queda al final del documento. Me gustaria conseguir que se quedara en el lugar de la pagina que yo quiera, he pensado en la posibilidad de que un "marcador" pudiera recibir el foco.

¿Alquien tiene alguna idea?
Última edición por Donilo el Mié May 19, 2010 3:08 pm, editado 1 vez en total.
OpenOffice 3.1 Windows XP
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Enviar foco a un marcador

Mensaje por mauricio »

Hola...

Puede haber muchas variantes para lo que quieres, a "bote pronto" se me ocurren dos, un campo oculto, la siguiente macro, te busca el primer campo oculto en el documento desde donde se llame y lleva el cursor visible a ese campo, toma en cuenta que queda seleccionado por lo que si escribes o el usuario escribe reemplazara al campo, también considera que si tu documento no tiene el campo oculto, y generas tu documento por código, tienes que insertar, también por código este campo para su posterior localización...

Código: Seleccionar todo

Sub IrACampoOculto()
Dim oDoc As Object
Dim oCampos As Object
Dim oCampo As Object
Dim oVCursor As Object

   'Este documento
   oDoc = ThisComponent
   'Los campos del documento
   oCampos = oDoc.getTextFields.createEnumeration()
   'Iteramos en todos
   Do While oCampos.hasMoreElements
      'Avanzamos al siguiente campo
      oCampo = oCampos.nextElement()
      'Verificamos que sea un campo oculto
      If oCampo.supportsService("com.sun.star.text.TextField.HiddenText") Then
      	oVCursor = oDoc.getCurrentController.getViewCursor
      	oVCursor.gotoRange( oCampo.getAnchor, False )      		
      	Exit Do
      End If
   Loop
      
End Sub
La otra seria, siguiente la misma tónica de la anterior, que insertaras un carácter "sui generis" para buscarlo y enviar el cursor ahí, la búsqueda en OOo es sumamente poderosa, como puedes verlo en el siguiente ejemplo: http://user.services.openoffice.org/es/ ... 083#p10068

Por favor, si esto responde tu pregunta, edita el primer mensaje de este hilo y agrega al principio del título la etiqueta [RESUELTO], de esta forma conseguiremos un foro más ordenado.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Donilo
Mensajes: 14
Registrado: Jue May 13, 2010 11:54 am

Re: Enviar foco a un marcador

Mensaje por Donilo »

Hola Mauricio, gracias por tu atencion.

He probado tu primera rutina, y no se en que me estoy equivocando, pero no consigo que el foco se valla a un campo oculto con la rutina que me proporcionaste.
La segunda opción si funciona, pero me sustituye el texto que busco por otro, no quedándose el foco en el lugar donde está el texto.

¿Alguien puede darme alguna otra opcion?

Gracias a todos.
OpenOffice 3.1 Windows XP
Donilo
Mensajes: 14
Registrado: Jue May 13, 2010 11:54 am

Re: Enviar foco a un marcador

Mensaje por Donilo »

Ya está resuelto. Mauricio tu rutina funcionaba perfectamente, el fallo lo estaba cometiendo yo. Una torpeza más mia.
Gracias por tu ayuda.

Un saludo a todos.
OpenOffice 3.1 Windows XP
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Enviar foco a un marcador

Mensaje por mauricio »

Hola...

La respuesta que di a otro usuario: http://user.services.openoffice.org/es/ ... t=0#p11258

Me ayudo a mejorar la forma de enviar el foco a un marcador, específicamente a un campo de usuario invisible, la ventaja en esta nueva versión es que no iteramos entre los campos, si no que vamos directamente al campo que queramos con su nombre, por supuesto el campo debe de insertarse previamente con el nombre y posición deseado, aquí la macro.

Código: Seleccionar todo

Option Explicit

Sub Main
Dim oDoc As Object
Dim oCampos As Object
Dim oCampo As Object
Dim sNombre As String
Dim oRango As Object
Dim oVCursor AS Object

	'El nombre de tu campo invisible
	sNombre = "Dos"
	'Este documento
	oDoc = ThisComponent
	'Los campos del documento
	oCampos = oDoc.getTextFieldMasters()
	'El campo de usuario invisible
	sNombre = "com.sun.star.text.fieldmaster.User." & sNombre
	'Nos aseguramos de que exista
	If oCampos.hasByName( sNombre ) Then
		'Accedemos al campo
      	oCampo = oCampos.getByName( sNombre )
		'Accedemos al rango donde esta
      	oRango = oCampo.DependentTextFields(0).getAnchor()
      	'Referencia al cursor visual
      	oVCursor = oDoc.getCurrentController.getViewCursor
      	'Movemos el cursor al campo oculto
      	oVCursor.gotoRange( oRango, False )
      	'Movemos el cursor un caracter a la derecha, esta línea es para
      	'evitar el reemplazo del campo al escribir
		oVCursor.goRight( 1, False )
   End If
      
End Sub
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder