Программируемый Диалог

Автор Tigrik, 9 мая 2020, 21:43

0 Пользователи и 1 гость просматривают эту тему.

rami

Так будет проще:
Sub Dlg_Display()
Dim oWindow, oDlg, oDlgModel, WW&, WH&
oWindow = CreateUnoService("com.sun.star.awt.Toolkit")
WW = oWindow.ActiveTopWindow.Info.Width
WH = oWindow.ActiveTopWindow.Info.Height
oDlgModel = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
oDlgModel.setPropertyValue("Title", "Диалог - Большое Окно Большого Брата")
oDlg = CreateUnoService("com.sun.star.awt.UnoControlDialog")
oDlg.setPosSize(0, 0, WW, WH, 15)                '<—— так
oDlg.setModel(oDlgModel)
oDlg.createPeer(oWindow, null)
oDlg.execute()
End Sub

Tigrik

Цитата: rami от 13 июня 2020, 16:28
Так будет проще:
Спасибо.
Разные методы по разному размеры считают?
С setPropertyValue, у меня, без коэффициентов получался больший размер окна.

Главное я понял, что ActiveTopWindow.Info подходит для таких задач.

rami

Цитата: Tigrik от 13 июня 2020, 17:56Разные методы по разному размеры считают?
На то они и разные.

Ещё можно сконвертировать размеры, проверьте такой вариант:
Sub DlgDisplay
Dim oWindow, winSize, oDlg, oDlgModel, newSize, w%, h%, bt
oWindow = CreateUnoService("com.sun.star.awt.Toolkit")
winSize = oWindow.ActiveTopWindow.Size
oDlgModel = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
oDlgModel.setPropertyValue("Title", "Диалог - Большое Окно")
oDlg = CreateUnoService("com.sun.star.awt.UnoControlDialog")
oDlg.setModel(oDlgModel)
oDlg.createPeer(oWindow, null)

newSize = oDlg.convertSizeToLogic(winSize, 17)   '17 или 18
w = newSize.Width
h = newSize.Height

oDlgModel.setPropertyValue("Width", w)
oDlgModel.setPropertyValue("Height", h)

bt = oDlgModel.createInstance("com.sun.star.awt.UnoControlButtonModel")
bt.setPropertyValues(Array("Height","PositionX","PositionY","PushButtonType","Label","Width"),Array(15, w-50, h-20, 1, "Step", 40))
oDlgModel.insertByName("StepButton",bt)
oDlg.execute()
End Sub

Tigrik

Цитата: rami от 13 июня 2020, 19:01
Цитата: Tigrik от 13 июня 2020, 17:56Разные методы по разному размеры считают?
На то они и разные.

Ещё можно сконвертировать размеры, проверьте такой вариант:
Rami, вот это класс!
Спасибо большое!

У этого метода convertSizeToLogic второй параметр (TargetUnit) имеет очень интересные константы.
17 и 18 дают одинаковые конвертации, а 16 - как раз показывает пиксели у моего монитора (аналогично от метода ActiveTopWindow.Info).
Понравилась константа KM (11) - размеры в километрах. ;D

rami

Цитата: Tigrik от 13 июня 2020, 20:05
Понравилась константа KM (11) - размеры в километрах. ;D
Не отъезжайте далеко от города в поисках кнопок и окошек от вашего диалога ;D