Noch ein kleiner Nachtrag - ist aber Geschmacksache, ob man's mag:
Die im Formularfenster angedockten Symbolleisten sind nicht immer der Hit und können sensiblen Menschen (wie mich

) bei der Formular-Gestaltung stören. Wozu habe ich denn einen Wide Screen Monitor? Also lasse ich die Symbolleisten irgendwo in der Gegend schweben und schone meine Augen ...
Ich hatte oben eine veraltete Code-Fassung einkopiert die nur Symbolleisten ein-/ausblendet und sonst nichts. Verwendet man aber frei schwebende Symbolleisten, dann werden diese (trotz vorheriger Positionierung von Hand) bei jedem Neustart von OO relativ wahllos auf dem Bildschirm verteilt - manchmal sogar ziemlich unschön mitten über dem Hauptmenü oder der Titel-Leiste.
Die hier vorgestellte Variante ist nur eine Ergänzung meines bereits oben geposteten Codes. Damit positioniert die Routine die Symbolleisten immer an die gleiche Stelle des Bilschirms. Dazu wird vorher mit meiner Funktion "GetActFrmPos" die Bildschirmposition des betreffenden Formulars ermittelt und dann die Symbolleisten relativ zu diesem ermittelten Standort positioniert.
... aber wie gesagt: wer's braucht - bei angedockten Symbolleisten kann man darauf natürlich komplett verzichten!
Gruß: ejomi
Hier die notwendige Zusatzfunktion zum Ermitteln der Formular-Position:
Code: Alles auswählen
Function GetActFrmPos(oFrmCtrl) As New com.sun.star.awt.Rectangle
' Funktion "GetActFrmPos", Autor: EJOMI
' Ermittelt die Position und Groesse eines Formulars
' Uebergabeparameter:
' Objekt-Handle des fraglichen Formular-Controllers
' Rueckgabe:
' X/Y-Pos und Breite/Hoehe als Rectangle-Strukt.
' Die Werte muessen im aufrufenden Programm von einer
' als Rectangle deklarierten Variablen eingelesen werden
' und sind dort als .Y, .X, .Width und .Height nutzbar.
On Error GoTo ScrErr
Dim oFrame As Object, oWin As Object, aRectVal As New com.sun.star.awt.Rectangle
oWin = oFrmCtrl.Frame.getContainerWindow()
With aRectVal
.X = oWin.PosSize.X
.Y = oWin.PosSize.Y
.Width = oWin.PosSize.Width
.Height = oWin.PosSize.Height
End With
GetActFrmPos = aRectVal
Exit Function
ScrErr:
MsgBox "Formular-Pos. konnte nicht ermittelt werden!", MB_ICONSTOP, "Func. 'GetActFrmPos'"
End Function
.. und jetzt die Erweiterungen für meine bereits vorgestellte Routine "OnOpenAnyForm":
Code: Alles auswählen
Dim bFloatingTBs As Boolean, iYOffset As Integer, iXOffset As Integer, iToolbarPos() As Integer
Dim aTBarPos As New com.sun.star.awt.Point, aFormPos As New com.sun.star.awt.Rectangle
' Schalter um Symbolleisten schweben zu lassen (oder nicht):
bFloatingTBs = True
' Horizal- und Vertikal-Offset von links bzw. von oben fuer alle Symbolleisten:
iXOffset = 500
iYOffset = 2
' Array mit allen horizontalen Positionen der unten definierten Symolleisten zusammenstellen:
iToolbarPos = Array(0,460,830)
' Array mit allen interessierenden Symolleisten-Namen (ausser Menubar) zusammenstellen:
sToolbarName = Array("formdesign","formcontrols","moreformcontrols")
' Fensterposition des Formulars mit der Funktion "GetActFrmPos" ermitteln:
If bFloatingTBs Then aFormPos = GetActFrmPos(oCurrCtrl)
' In die Schleife, mit der die Symbolleisten angezeigt werden, folgendes einfuegen:
If bFloatingTBs Then
' Moeglicherweise zuvor angedockte Symbolleiste jetzt frei schweben lassen:
oLayoutMan.floatWindow(sResource)
' ... und relativ zum aktuellen Formular positionieren:
With aTBarPos
.X = (aFormPos.X * -1) + iXOffset + iToolbarPos(n)
.Y = (aFormPos.Y * -1) + iYOffset
End With
oLayoutMan.setElementPos(sResource,aTBarPos)
EndIf
' Lineale im Formular-Entwurf sind auch so 'ne dolle Sache - ich will's nicht:
With oFrmObj.ViewSettings
.ShowHoriRuler = False
.ShowVertRuler = False
End With