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

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

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

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

Сообщений: 23


« Стартовое сообщение: 28 Декабрь 2018, 09:54 »

Подкиньте, пожалуйста, базовый код макроса для создания в открытом окне диалога нового элемента управления, например, текстового поля и простого текста ака 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
« Последнее редактирование: 28 Декабрь 2018, 10:59 от AndyNebula » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 727


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 28 Декабрь 2018, 11:09 »

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

А в твоем примере, если честно, назначение этих четырех строк после oDlgPP.execute() совершенно не понял. Что этот код должен делать?
Записан

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

Сообщений: 23


« Ответ #2: 28 Декабрь 2018, 13:30 »

А в твоем примере, если честно, назначение этих четырех строк после oDlgPP.execute() совершенно не понял. Что этот код должен делать?
Это пофигу.
А за первый абзац большое спасибо. Всё заработало)
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 727


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 28 Декабрь 2018, 13:43 »

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

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

Сообщений: 23


« Ответ #4: 28 Декабрь 2018, 16:47 »

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

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

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

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


Это https://forumooo.ru/index.php?topic=5578.0 не помогло понять)))
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 727


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #5: 28 Декабрь 2018, 17:58 »

Прямо так, в лоб - метод у диалога есть .setPosSize(X,Y,Width,Height,Flags)
Записан

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

Сообщений: 23


« Ответ #6: 29 Декабрь 2018, 10:36 »

то, что надо
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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