Wie erstelle ich einen Listener, der auf Veränderungen der Fenstergröße reagiert?

Für eine spezielle Formularkonstruktion lasse ich je nach Fenstergröße ein Tabellenkontrollfeld breiter oder schmaler erscheinen. Beim Öffnen des Formulars wird die Fenstergröße dafür an ein Makro weiter gegeben.

Leider gibt es bei Formularen nicht das Ereignis “Fenstergröße verändert”, so dass ich die Größe des Tabellenkontrollfeldes automatisch anpassen kann. Dafür nehme ich dann zur Zeit einen Button oder ein Tastaturkürzel.

Mein Gedanke: Es gibt ja XWindowListener. Die haben auch WindowResized als Event. Nur ist mir völlig unklar, wie ich so einen Listener erstelle, der dann auf die Veränderung der Fenstergröße reagiert und mir mitteilt: Fenster ist größer geworden → Tabellenkontrollfeld anpassen.

XWindowListener.odt (12.6 KB)

Leider kann man mit StarBasic keine eigenen UNO-Objekte definieren. Daher gibt es eine Funktion createUnoLIstener, der man neben dem Schnittstellennamen ein Namensprefix übergibt. Die Routinen mit diesem Prefix werden dann aufgerufen nachdem man den so erzeugten Listener an das passende Objekt geklebt hat.

2 Likes

Klasse, funktioniert prima!
Wenn ich das Fenster vergrößere wird merkwürdigerweise auch das Event zum Bewegen des Fensters benötigt, aber das habe ich dann einfach leer dazu gepackt.
Und: Natürlich bin ich erst einmal über “ThisComponent” in der bsiherigen Prozedur gestolpert. Das war natürlich bei dem Vergrößerungsereigni nicht mehr das aktuelle Dokument. Habe daraus dann StartDesktop.currentComponent gemacht und kann die Prozedur zum Formularstart und bei der Größenveränderung des Formulars ablaufen lassen.

Natürlich, wie so oft: Das kommt dann ins Handbuch für Base, obwohl ich langsam das Gefühl habe, dass das Makro-Kapitel da übergewichtig wird.