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

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

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

mikekaganski

С уважением,
Михаил Каганский

Kadet

Цитата: mikekaganski от  3 декабря 2019, 23:09oDlg.Visible = true
Несколько не понял идею?! Visible = true обычно используется для визуализации чего-нибудь. Это вместо запуска диалога или после его запуска?

mikekaganski

С уважением,
Михаил Каганский

Kadet

Огромное спасибо. С этим вопросом разобрался.

Kadet

Возможно, что-то нашёл по печати. ТУТ. Завтра попробую.

Kadet

Очень жаль, но не получается воспользоваться "индикатором выполнения", в частности как предлагается ТУТ. Теперь диалог не останавливает работу самого макроса, к поторому и должен быть прицеплен индикатор, а сам цикл индикатора останавливает.
Или я просто не смог его правильно подцепить.

mikekaganski

Цикл индикатора?? :o У индикатора не должно быть никакого цикла. Цикл может быть (а может и не быть) у той самой длительной процедуры, которая в какой-то момент этого цикла, или в какие-то моменты выполнения без цикла, решает обновить показания индикатора ...
С уважением,
Михаил Каганский

Kadet

mikekaganski, да, да... Я уже врубился, что приращивание индикатора нужно внедрять в основной макрос.

mikekaganski

Кстааати! Ведь можно вообще использовать прогрессбар в строке статуса ЛО, например, как указано здесь: https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=87057
С уважением,
Михаил Каганский

Kadet

Цитата: mikekaganski от  4 декабря 2019, 15:53Ведь можно вообще использовать прогрессбар в строке статуса ЛО
Хорошая идея. Однако, мне кажется, что лучше будет если диалог будет мешать оператору, чтобы ожидал, а не мешал своими клацаниями по всем кнопкам... и этот самый макрос по десять раз не запускал, полагая, что с первого раза ничего не стартовало. А внизу в строке состояния и не увидят.

Кстати, по этому поводу ещё хотел бы спросить совета. Этот самый макрос - это поиск оптимального раскроя детали. Вещь достаточно сложная и иной раз длительная. По сути он пересчитывает факториал возможных раскроев. И с каждым увеличением количества деталей время расчёта увеличивается в разы. Сегодня столкнулся с подобной проблемой. Поставил индикатор итераций на этот диалог и увидел некоторую особенность. В общем, все результаты, вернее найденные раскрои, я записываю в массив, постепенно увеличивая его разрядность. Для поиска раскроев использую рекурсивную процедуру. Так вот, заметил, что с увеличением размеров массива поиск становится всё медленнее и медленнее. По-началу индикатор просто просто мелькает без остановки, а со временем всё медленней и медленней, потом щёлкает с длительными задумчивостями. Хотя процедуру выполняет одну и ту же, что в начале, что в конце.
Предполагаю, что это напрямую связано с объёмом формируемого массива.
Как бы обойти эту ситуацию, чтобы в конце работы скорость обработки была бы такой же как в начале?

rami

Это нужно смотреть на макрос и данные. Возможно, глубина рекурсии увеличивается.

kompilainenn

у меня есть подозрение, что этот ваш макрос по раскрою надо переписать на более ином языке, чем бейсик
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

Kadet

Цитата: rami от  5 декабря 2019, 23:29Это нужно смотреть на макрос и данные. Возможно, глубина рекурсии увеличивается.
"Глубина рекурсии"?!.. Завтра проверю.

Ну, вот сварганил приблизительно демку. Вроде работает.

Kadet

#43
Вот на скорую руку сделал полную демку с выводом результатов.

Кнопка "Запустить (1)" берёт данные из "Лист1", которые нужно вводить самому (как в оригинале).
Кнопка "Запустить (2)" берёт данные из "Лист2", которые уже занесены и можно менять.

mikekaganski

#44
Несколько предварительных замечаний

1. Перед oLib = DialogLibraries.getByName("MyLibrary") добавьте DialogLibraries.LoadLibrary("MyLibrary"), чтобы избежать появляющихся сообщений о ненайденной библиотеке. (Ну, и опечатка там - потеряна единичка в oDlgWait = CreateUnoDialog(DialogLibraries.MyLibrary.oDlgWait1)).
2. В RASCHET_raskroy1 oEvent не передаётся в OPTOMAL_fas1
3. Нет WAITExitDlg
4. Насчёт производительности: постарайтесь всеми средствами избегать реаллокаций - создавайте достаточно большой массив и храните информацию о его наполнении, но уберите все ReDim preserve из циклов! Это очень дорогая операция.
С уважением,
Михаил Каганский