Cómo detectar redimensionado en la ventana ?

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

Cómo detectar redimensionado en la ventana ?

Notapor arfgh » Mié Abr 17, 2019 12:43 pm

Hola de nuevo amigos !

Me gustaría saber si conocéis de alguna forma de detectar el redimensionado de la ventana en formularios o en informes dentro de base, bien porque el usuario le da al botón de pantalla completa o bien porque redimensionamos a mano los bordes. Me parece que no hay ningún evento que nos ayude en esto, lo cual a priori implicaría tener una subrutina corriendo de manera permanente de fondo detectando el tamaño de la ventana y actuando cuando fuese preciso...
Pero esto nos generaría otro problema. Mientras esa subrutina este funcionando de fondo, los otros eventos no serán procesados y se atascarán hasta que salgamos de esa subrutina en bucle de fondo... Con vb6 esto se solucionaba con el clásico 'doevents' dentro del bucle, pero desconozco si la UNO API tiene algo parecido...

Por lo tanto estoy buscando una forma de poder hacerlo pero sin tener una subrutina corriendo de fondo en bucle....

alguna idea al respecto ?
OpenOffice última versión, Windows XP X64, Windows 8.1 X64
arfgh
 
Mensajes: 10
Registrado: Mar Mar 05, 2013 4:40 pm

Re: Cómo detectar redimensionado en la ventana ?

Notapor mauricio » Mié Abr 17, 2019 7:13 pm

Si que lo hay, con Python es trivial...

Código: Seleccionar todo   Expandir vistaContraer vista
import uno
import unohelper
from com.sun.star.awt import XWindowListener

class EventsWindow(unohelper.Base, XWindowListener):

    def __init__(self, controller):
        super().__init__()
        self._controller = controller

    def disposing(self, event):
        pass

    def windowResized(self, event):
        event_name = 'window_resized'
        if hasattr(self._controller, event_name):
            getattr(self._controller, event_name)(event)
        return

    def windowMoved(self, event):
        pass

    def windowShown(self, event):
        pass

    def windowHidden(self, event):
        pass


class Eventos(object):

    def __init__(self):
        pass

    def window_resized(self, event):
        ps = event.Source.PosSize

        msg = f'Pos X: {ps.X}\tPos Y: {ps.Y}\tAncho: {ps.Width}\tAlto: {ps.Height}'
        print(msg)

        return


def abrir_formulario(event=None):
    e = Eventos()
    w = event.Source.CurrentController.ComponentWindow
    w.addWindowListener(EventsWindow(e))
    return


Que produce la siguiente salida cada vez que redimencionas la ventana.
foro.png


No le veo caso para un informe, pero es "casi" el mismo proceso.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5732
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Cómo detectar redimensionado en la ventana ?

Notapor mauricio » Mié Abr 17, 2019 7:17 pm

Olvide mencionar, la macro abrir_formulario, se debe asociar al evento, Documento abierto del formulario, eso es todo...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5732
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Cómo detectar redimensionado en la ventana ?

Notapor arfgh » Mié Abr 17, 2019 10:00 pm

y en basic ?
OpenOffice última versión, Windows XP X64, Windows 8.1 X64
arfgh
 
Mensajes: 10
Registrado: Mar Mar 05, 2013 4:40 pm


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados