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

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

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

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

Сообщений: 94


« Ответ #54556: 10 Май 2020, 21:15 »

Свойство "TabIndex" здесь не причём, оно служит для установления порядка перемещения фокуса клавишей "TAB", при этом оно само по себе не меняется.
После нажатия на кнопку "ПРИМЕНИТЬ" происходят два действия: первым делом перемещается фокус на эту кнопку, затем закрывается диалог, но объект диалога никуда не пропадает, его снова можно запустить методом oDlg.Execute() в том виде, в каком он был на момент закрытия, т.е. фокус будет на кнопке "ПРИМЕНИТЬ". Переместить фокус можно методом oDlg.getControl("ForField1").setFocus()
Цитата: Tigrik от Вчера в 21:43
Уменьшить программный код это очень хорошо, но путь который вы выбрали приведёт к усложнению кода (он и без этого сложный). Свойства нужно устанавливать методом setPropertyValues()

Rami, спасибо большое за помощь.
У меня же была в голове, как сейчас модно говорить, мыслеформа - присмотреться к фокусу, но, почему то, подумал, что это связано с обработкой событий и мышкой, когда наводишь на определенное место диалога.
Всё отлично работает!

Скорее всего, я не совсем грамотно объяснил свои поиски "сборки" массивов.
В любом случае, я использовал и буду использовать метод setPropertyValues(). В данный момент, весь массив свойств для конкретного элемента управления определяется в одном месте (как это показано в примере). Для некоторых элементов упр. некоторые свойства одинаковые, то есть их можно завести в отдельные массивы. И, уже перед самым циклом задания моделей элементов, окончательно "собрать" массив свойств из нескольких массивов (если это будет необходимо).
Как я уже говорил, можно "собрать" строку (там как и положено чередуются название свойств и их значения, допустим, через запятую - Join() так может делать) из разных массивов, а затем "расщепить" (Split()) в строковый массив, а элементы массива, которые являются значениями свойств (каждый второй, так как первый - имя свойства), преобразовать в численное значение. Но некоторая "загвоздка" в том, что есть и строковые значения свойств. Правда, их немного и это не так трудно анализировать, но, сначала, я решил подумать: можно ли обойтись без этих преобразований.
На небольшом примере будет более наглядно.
   Dim a, b, c
   a = Array("Name", "But_OK")
   b = Array("Align", 1, "Label", "ОТМЕНИТЬ")
Как сделать, что бы одномерный массив с состоял из массивов а и в, т.е. с = {"Name", "But_OK", "Align", 1, "Label", "ОТМЕНИТЬ"}?
Конечно, это можно сделать в цикле, непосредственно задавая каждому элементу массива соотвествующее значение. Но если таких действий много, то это, наоборот, по моему мнению, перегружает код.
Может быть, можно применить что то из категории сложение матриц, но я, к сожалению, пока, с этим не сталкивался?

Спасибо.
Записан
Страниц: 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!