Создать новый элемент управления в окне диалога

Автор AndyNebula, 28 декабря 2018, 09:54

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

AndyNebula

Подкиньте, пожалуйста, базовый код макроса для создания в открытом окне диалога нового элемента управления, например, текстового поля и простого текста ака Label.

Есть такой макрос (часть его) к примеру. Сейчас в нем от 1 до 4 строк параметров с полями и текстом, которые по мере надобности становятся видимыми и доступными, но хочется, чтобы их больше появлялось, от 1 до N таких строк в зависимости от необходимости с изменением размера окна диалога.
Базовый вопрос - никак не найду как создавать новый элемент управления в окне открытого диалога "Sales_D"

Function StartDialogP()
   oDoc = ThisComponent
   oSheet = oDoc.sheets (0)
   DialogLibraries.LoadLibrary("MyLib")
       oDlgPP = CreateUnoDialog(DialogLibraries.MyLib.Sales_D)
      ' перебираем и делаем невидимыми
    x = oDlgPP.getControls()
   for ii = 7 to 13
      x(ii).SetVisible(False)
   next   
   for ii = 14 to 25
      x(ii).SetVisible(False)
   next
   oDlgPP.getControl("rf1").SetVisible(True)
   oDlgPP.execute()

   oDlgPP.getControl("tf1").Model.Text = "" : oDlgPP.getControl("nf1").Model.Value = 1 : oDlgPP.getControl("rf1").Model.Value = 0
   oDlgPP.getControl("tf2").Model.Text = "" : oDlgPP.getControl("nf2").Model.Value = 1 : oDlgPP.getControl("rf2").Model.Value = 0
   oDlgPP.getControl("tf3").Model.Text = "" : oDlgPP.getControl("nf3").Model.Value = 1 : oDlgPP.getControl("rf3").Model.Value = 0
   oDlgPP.getControl("tf4").Model.Text = "" : oDlgPP.getControl("nf4").Model.Value = 1 : oDlgPP.getControl("rf4").Model.Value = 0
End Function

JohnSUN

Ну, общая схема действий выглядит обычно так:
С помощью метода .getModel() получаешь модель диалога oDlgPP
Методом этой модели .createInstance( "com.sun.star.awt.UnoControl_тип_элемента_управления_Model" ) создаёшь модель нового элемента управления.
Задаёшь этой заготовке элемента управления все нужные параметры - размер, положение, надпись, имя и т.д., и т.п.
Методом модели диалога .insertByName( уникальное_имя, новая_модель_элемента_управления) вставляешь в диалог.

А в твоем примере, если честно, назначение этих четырех строк после oDlgPP.execute() совершенно не понял. Что этот код должен делать?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

AndyNebula

Цитата: JohnSUN от 28 декабря 2018, 11:09А в твоем примере, если честно, назначение этих четырех строк после oDlgPP.execute() совершенно не понял. Что этот код должен делать?
Это пофигу.
А за первый абзац большое спасибо. Всё заработало)

JohnSUN

Я почему спросил, после этого самого .execute() выполнение текущей процедуры приостанавливается до тех пор, пока диалог не закроется. Все действия (типа, как в этих четырех строках - что-то стереть, что-то выставить в единичку) должны быть вынесены в другие процедуры, которые будут вызываться уже по событиям элементов управления самого диалога: нажатие кнопок, изменение текстов, выборы из списков... Другими словами, все последующие действия должны быть как бы запакованы внутрь самого диалога - снаружи мы к нему (временно) уже не достучимся.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

AndyNebula

Это понятно, просто скопипаздил часть кода для лучшего представления, а только запутал)

Если можно, второй простой вопрос:

'как высоту уже имеющегося элемента (кнопка "CB1") изменить понятно,
oDlgPP.getControl("СB1").Model.Height = 10

а вот как изменить высоту диалогового окна "Sales_Ds"?


Это https://forumooo.ru/index.php?topic=5578.0 не помогло понять)))

JohnSUN

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне