Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

18 Май 2021, 17:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Программируемый Диалог  (Прочитано 4427 раз)
0 Пользователей и 1 Гость смотрят эту тему.
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 071


iMac, LibreOffice и Apache OpenOffice


« Ответ #54876: 11 Июнь 2020, 17:46 »

из основной процедуры в процедуру Button_actionPerformed(ActionEvent) объект Диалог (в данном примере - oDlg)
В Button_actionPerformed передаётся объект вызвавший событие (кнопка), а у кнопки есть родительский объект (диалог), так что можно получить объект диалога из ActionEvent, но проще объявить переменную в модуле.

из процедуры Button_actionPerformed(ActionEvent) вернуть в основную процедуру DlgRez?
Смотрите в примере методы .endDialog() и .execute() и пояснения к ним.

можно ли безбоязненно применять этот указатель oDlg, после того как уничтожится диалог методом .dispose()?
Зачем уничтожать диалог? Если очемь хочется, можно обнулить переменную oDlg.

Код:
Dim oDlg, x, n 'Объект Диалог
Sub Dlg_Button()
Dim oDlgModel, oModel, oLis, i%
Dim DlgRez 'Результат действия Диалога
oDlgModel = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
oDlgModel.setPropertyValue("PositionX", 333) : oDlgModel.setPropertyValue("PositionY", 185)
oDlgModel.setPropertyValue("Width", 160) : oDlgModel.setPropertyValue("Height", 60)
oDlgModel.setPropertyValue("Title", "Кнопки в диалоге")
oDlg = CreateUnoService("com.sun.star.awt.UnoControlDialog")
oDlg.setModel(oDlgModel)
oLis = CreateUnoListener("Button_", "com.sun.star.awt.XActionListener")  'Listener создаём один раз
For i% = 1 to 2
oModel = oDlgModel.createInstance("com.sun.star.awt.UnoControlButtonModel")
oModel.setPropertyValue("PositionX", Clng(70*i-50)) : oModel.setPropertyValue("PositionY", 20)
oModel.setPropertyValue("Width", 50) : oModel.setPropertyValue("Height", 20)
oModel.setPropertyValue("PushButtonType", 0) : oModel.setPropertyValue("Label", "Кнопка № "&i)
oModel.setPropertyValue("TabIndex", i)
oDlgModel.insertByName("ComButton" & i, oModel)
oDlg.getControl("ComButton" & i).addActionListener(oLis)
Next
oDlg.createPeer(CreateUnoService("com.sun.star.awt.Toolkit"), null)
DlgRez = oDlg.execute()         'возвращает значение переданное в метод oDlg.endDialog(nTabIndex)
'If oDlg.execute() = 0 Then Print "Выход без кнопки!" : Exit Sub 'Почему-то не работает!?
If DlgRez Then Print "Нажата кнопка № " & DlgRez Else Print "Выход без кнопки!"
End Sub


Sub Button_actionPerformed(ActionEvent)
Dim nTabIndex%
nTabIndex = ActionEvent.Source.Model.TabIndex
Print "TabIndex: "  & nTabIndex
oDlg.endDialog(nTabIndex)          'передаём значение методу oDlg.execute()
' oDlg = Nothing 'раскомментировать, если хочется обнулить объект
End Sub
Записан

Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!