Hallo sven-my!
sven-my hat geschrieben:Ich muß in meinem Fall ganz nach rechts schieben.
... dann drück Dich bitte zukünftig mal etwas klarer aus: dass Du den Dialog
rechts positionieren möchtest, hattest Du nicht erwähnt!
sven-my hat geschrieben:Also muß ich rechnen.
... ja doch - nun überanstrenge Dich nicht gleich!
sven-my hat geschrieben:Wenn ich es mir ganz einfach machen wollte hätte ich meine Zahlen genommen hätte, die ich mit, Deiner Meinung nach unsinnigen Rechnerei ...
... jawohl, Du kannst es Dir einfach machen und - jawohl - Deine Rechnerei ist nach wie vor unsinnig! (siehe weiter unten: mein Code mit Erläuterungen)
Wozu Bildschirmabmessungen mit Taskleiste und sonstigem Pipapo berechnen? Das einzige was hier interessiert sind die Maße Deines Anwendungsfensters (z.B. Calc) und Deiner Dialogbox - sonst nix. Und da muß man dann ein bißchen rechnen (stöhn): Einfach die Breite des Dialogfensters von der Breite des Anwendungsfensters abziehen und schon hat man die erforliche X-Position - ist das denn so schwierig??
sven-my hat geschrieben:Während ich am Makro stricke, kommt es des öfteren vor, daß ich das Dialogfenster in den Abmessungen ändere, daher die Frage danach, ob man diese Zahlen auslesen kann.
... ja, man kann - siehe nachfolgenden Code.
Code: Alles auswählen
Sub Main
Dim oFrmFrame, oCntWindow, oDialogLib, oDialog
Dim WinSize As New com.sun.star.awt.Rectangle
Dim DlgSize As New com.sun.star.awt.Rectangle
Dim OffsetTop%, OffsetRgt%
' Vorgaben:
' Gewuenschter Versatz des Dialogfensters von oben
' und von der rechten Ecke des aktiven Fensters:
OffsetTop = 170
OffsetRgt = 60
' Den aktiven Frame im Star-Desktop ermitteln:
oFrmFrame = StarDesktop.getCurrentFrame()
' Das im Frame enthaltene Anwendungs-Fenster:
oCntWindow = oFrmFrame.getContainerWindow()
' Die aktuelle Groesse des Anwendungsfensters
' als Rectangle-Strukt (in Pixel) einlesen:
WinSize = oCntWindow.PosSize()
' Die Bibliothek, welche den Dialog-Entwurf enthaellt
' (hier z.B. aus "Standard") bereitstellen:
oDialogLib = DialogLibraries.getByName("Standard")
' Das gewuenschte Dialogfenster (hier z.B. mit Namen "Dialog1") bereitstellen:
oDialog = CreateUnoDialog(oDialogLib.getByName("Dialog1"))
' Um Position und Abmessung des Dialogs zu ermitteln,
' muss es erst mal sichtbar gestellt werden (= non mondal!):
oDialog.visible = True
' Die aktuelle Groesse des Dialogs
' als Rectangle-Strukt (in Pixel) einlesen:
DlgSize = oDialog.PosSize()
' Mal alle bisher gesammelten Daten zeigen:
MsgBox "X: " & CStr(WinSize.X) & ", Y: " & CStr(WinSize.Y) & _
", W: " & CStr(WinSize.Width) & ", H:" & CStr(WinSize.Height), _
MB_ICONINFORMATION, "Größe des Anwendungsfensters (in Pixel):"
MsgBox "X: " & CStr(DlgSize.X) & ", Y: " & CStr(DlgSize.Y) & _
", W: " & CStr(DlgSize.Width) & ", H:" & CStr(DlgSize.Height), _
MB_ICONINFORMATION, "Größe des Dialogs (in Pixel):"
' - - M E H R I S T W I R K L I C H N I C H T N O E T I G ! - -
' Der Rest erklaert sich selbst:
MsgBox "Ab - nach oben, links (mit X/Y-Versatz!) ...", MB_ICONINFORMATION, "Dialog-Position:"
oDialog.setPosSize(OffsetRgt, OffsetTop, DlgSize.Width, DlgSize.Height, 15)
MsgBox "Ab - nach oben, rechts (mit X/Y-Versatz!) ...", MB_ICONINFORMATION, "Dialog-Position:"
oDialog.setPosSize((WinSize.Width-DlgSize.Width)-OffsetRgt, OffsetTop, DlgSize.Width, DlgSize.Height, 15)
MsgBox "Ab - nach unten, links ...", MB_ICONINFORMATION, "Dialog-Position:"
oDialog.setPosSize(0, (WinSize.Height-DlgSize.Height), DlgSize.Width, DlgSize.Height, 15)
MsgBox "Ab - nach unten, rechts ...", MB_ICONINFORMATION, "Dialog-Position:"
oDialog.setPosSize((WinSize.Width-DlgSize.Width), (WinSize.Height-DlgSize.Height), DlgSize.Width, DlgSize.Height, 15)
MsgBox "Wieder zurück, zum Ausgangspunkt ...", MB_ICONINFORMATION, "Dialog-Position:"
oDialog.setPosSize(DlgSize.X, DlgSize.Y, DlgSize.Width, DlgSize.Height, 15)
' Zum Schluss den Dialog modal zeigen (muß per Break-Button geschlossen werden):
oDialog.Execute()
' ... UND, WO WAR NUN DAS PROBLEM ??
End Sub
Gruß: ejomi