Возможно ли создать многостраничную форму в LO Base

Автор Kadet, 25 ноября 2019, 21:58

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

Kadet

Цитата: mikekaganski от 26 ноября 2019, 10:00У Вас используются LockControllers+addActionLock с их последующей отменой, как показано здесь? (вдруг поможет)
Кстати. внедрил эту фишку. Действительно стало чуть быстрей.
А вот для форм, чтобы каждая кнопочка по отдельности не прорисовывалась, не знаете ли способа заморозки? А то кнопочки всё равно при формировании таблиц медленно прорисовываются.

mikekaganski

Дайте пример кода, просто создающего 10 кнопок на обычном документе (без БД; я предполагаю, что это должен быть документ Calc?), чтобы погонять.
С уважением,
Михаил Каганский

Kadet

#17
Сделал примерный demo.
При очистке иногда пропадает запускающая кнопка. Не получается закрепить её навсегда.
А на создаваемые кнопки повесить запуск макроса у меня не получается. Не умею, а разбираться нет времени.

Задержки Wait 100 поставил, чтобы приблизить скорость заполнения к реальной, которая делается в базе. В базе задержку создают громоздкие запросы к бд и насыщенное форматирование строк calc.

rami

В строке кода 113: функция GetIndex не определена (отсутствует)

rami

Нашёл функцию GetIndex.

Цитата: Kadet от 28 ноября 2019, 21:31А на создаваемые кнопки повесить запуск макроса у меня не получается. Не умею, а разбираться нет времени.
Для назначения макроса Macro из этого же модуля (Standard.Module1 в документе) на кнопку, нужно поправить строку кода:
sScriptURL = "vnd.sun.star.script:Standard.Module1.Macro?language=Basic&location=document"
естественно этот макрос должен быть в наличии.

Kadet

Цитата: rami от 28 ноября 2019, 22:24В строке кода 113: функция GetIndex не определена (отсутствует)
Прошу прощения. Не углядел.
Прицепил функцию GetIndex.

Спасибо за совет по цеплянию макроса на кнопки! Теперь буду знать. А то я и так и эдак, а оно никак.
Теперь по каждой кнопке снова будет запускаться этот же макрос.

Kadet

#21
Вот я чего думаю. В коде вставки кнопки есть вот этот код:
oControlShape.setControl(oButtonModel)
oDrawPage.add(oControlShape)

Именно он и предъявляет саму кнопку и делает её видимой. По идее, наверное, есть, вернее должна быть такая возможность, чтобы сначала формировать модели кнопок (oButtonModel) не выставляя их сразу,.. скапливать их модели в каком-нибудь массиве, а потом выставить этот массив объектов в форме, всех скопом (oDrawPage.add(oControlShape)).

Kadet

В принципе сделал формирование блока кнопок быстрое их выведение.
Однако, rami, попал в самую точку с функцией GetIndex. Она, в поисках индекса нового элемента (кнопки) перебирает всю форму. И так при каждой вставки новой кнопки. Чем больше кнопок, тем медлительней он становится и тормозит весь процесс.
А так как вновь вставляемый элемент (кнопка) всегда имеет последний индекс, то не зачем перебирать всю форму. Достаточно взять count-1 и получим именно этот нужный индекс элемента. Что и сделал.
Заменил вот эту строку:
nIndex = GetIndex(oButtonModel, oForm)
На эту:
nIndex = oForm.Count-1
И всё значительно ускорилось.

Ну и некоторые другие эксперименты проделал. Всё во вложении.

rami

Kadet, вы слишком усложняете макросы.

1. нужно удалять из библиотек и модулей все не нужные макросы, переменные и всё что никак не используется, а вот краткие и понятные комментарии очень нужны.

2. нужно из всех возможных методов выбирать самые лёгкие и простые, например, вместо раздельного удаления столбцов и форм (при этом от кнопок остаются "шкурки" — не видимые рисованные объекты, со временем их накопится столько, что прогнётся днище у компьютера ;D), лучше очищать диапазон от содержимого (включая объекты) одним простым действием.

3. не нужно для "каждого чиха" (каждого вида кнопок) создавать свой макрос, один макрос должен создавать любую кнопку в зависимости от переданных параметров.

Смотрите:

Kadet

#24
rami, красиво, кратко и лаконично.
Когда делал, по большому счёту подобные макросы копировал как штампы и не сильно разбирался с их содержимым. Просто подгонял и штамповал дубли. Торопился запустить в работу.

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

И спасибо, за подсказку по чистке. Я её искал, да не нашёл.

Kadet

Подскажите, пожалуйста, ещё пару моментов, уважаемые коллеги.
Сделал макросы печати calc документов. Всё хорошо. Всё печатает. Однако, для полной идилии хотел бы прежде печати выводить окно предпросмотра и настройки. Никак не могу найти как это можно сделать в макросе.

И ещё один вопрос. Есть макрос, который работает достаточно долго. Однако, пока он работает никаких опознавательных знаков не подаёт, типа "ждите". И не понятно - работает он или нет. Хочу сделать диалоговое окно типа "Ожидайте...". Однако, любой диалог сразу останавливает все макросы, пока его не закроешь. Как можно сделать диалог, который не останаливал бы макросы?

rami

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

Kadet

Цитата: rami от  3 декабря 2019, 22:46запускайте этот макрос из этого окна кнопкой
Неудобно. Лишняя итерация. У меня в форме стоит кнопка "расчёт" и по её нажатии начинается расчёт сложных вычислений. Иной раз быстро, а иной раз долго, в зависимости от количества введённых параметров. Вызов дополнительного диалога для запуска расчёта неудобно, в особенности для быстрых расчётов, которых большинство.

rami

Можно на кнопке менять надпись "ждите..." или что-нибудь подсвечивать во время работы макроса.

Kadet

Нашёл в инете идею, что вместо диалога выводить маленькую форму. В принципе идея стоящая. Попробую.

А вот по принтеру пока никаких идей не нашёл.