Вызов стандартного диалога для ввода данных в Calc

Автор tagezi, 21 июня 2016, 14:26

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

tagezi

В Calc, например, когда делаешь диаграмму, для указания диапазона используется диалоговое окно (см. картинку dialog).
Меня интересует, как можно вызвать подобное окно из макроса и вернуть значение из него в переменную.
В моём диалоговом окне есть, кнопочки (см. картинку form). Нажимая на них, пользователь должен иметь возможность выбрать ячейку или диапазон. И адрес на эту ячейку (диапазон) должен вставать в текстовое поле. Пример диалога ниже.
Вот вопрос, можно ли использовать стандартное окно (и как) или нужно реализовывать своё?
Спасибо за идеи.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

JohnSUN

Не смог найти полное решение (наверное, оно было не здесь, а на Инфра-Ресурсе). Но суть такова:
Диалог оформляется и загружается как обычно, но запускается не через execute, а через show - это делает его не модальным, позволяет потыкать мышью в лист книги. Какая-то булева переменная следит за активностью окна - если кнопкой "Закрыть" переменную сбрасывают в False, окну диалога посылается команда .Hide
Ну и по событию "изменение выделенной области" в нужное поле закидывается .getCurrentSelection().AbsoluteName.
Подробнее не расскажу, давно было. Если не сделаешь - маякни, пороюсь в архивах, может, и сохранился где-то примерчик
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

tagezi

Цитата: JohnSUN от 21 июня 2016, 14:44
Не смог найти полное решение (наверное, оно было не здесь, а на Инфра-Ресурсе). Но суть такова:
Диалог оформляется и загружается как обычно, но запускается не через execute, а через show - это делает его не модальным, позволяет потыкать мышью в лист книги. Какая-то булева переменная следит за активностью окна - если кнопкой "Закрыть" переменную сбрасывают в False, окну диалога посылается команда .Hide
Ну и по событию "изменение выделенной области" в нужное поле закидывается .getCurrentSelection().AbsoluteName.
Подробнее не расскажу, давно было. Если не сделаешь - маякни, пороюсь в архивах, может, и сохранился где-то примерчик
Спасибо, буду пробовать. Если не разберусь, буду маячить.  :)
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha


tagezi

Цитата: rami от 21 июня 2016, 15:08
А как ты до таких окон добрался?
Разрабатываю программный модуль анализа чувствительности инвестиционного проекта... Почти всё реализовано, остались мелкие штуки, типа этой, и ещё пару.
Диплом защищаю 27 числа, хочу более менее нормальную штуку отдать... Вот так и добрался... Как-то так :)
Потом потихоньку допилю до нормального состояния и выложу в общий доступ.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

rami

Цитата: tagezi от 21 июня 2016, 13:13Разрабатываю программный модуль анализа чувствительности инвестиционного проекта...
Ты сам сделал эти окна в редакторе диалогов? Или как?

tagezi

Цитата: rami от 21 июня 2016, 12:29Ты сам сделал эти окна в редакторе диалогов? Или как?
Да, в редакторе диалогов. Что-то я не смог нормально осилить как это всё в коде делать... да и проще так, по крайне мере на этом этапе, не нужно задавать кодом позиционирование.
А маленькое окошко я пока не делал, но видимо придется.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

JohnSUN

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

JohnSUN

Ага, нарыл... Не помню, для кого писал и зачем, что эта бодяга должна была делать тоже не помню - все-таки 4 года прошло. Но диалог работает, кажется, так, как ты и задумывал
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

tagezi

Цитата: JohnSUN от 21 июня 2016, 22:01
Ага, нарыл... Не помню, для кого писал и зачем, что эта бодяга должна была делать тоже не помню - все-таки 4 года прошло. Но диалог работает, кажется, так, как ты и задумывал
Спасибо большое, буду разбираться :)
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

economist

tagezi - по диалогу: "Неиспользовать" пишется раздельно, левый верхний контрол - меньше других.

Это я к чему: все подобные диалоги лучше реализовать прямо на Листе Calc, в ячейках. Всё будет ровно и без орфографических ошибок. И красоту можно навести неимоверную (тени, картинки, анимация). А главное - программного кода будет на порядок меньше. Ту же проверку значений, подсветку, вычисления итп - на порядок проще организовать в Листе. На производстве такой подход позволяет переложить работу на обычных пользователей - они эти "раскраски" воспринимают с благоговением :-))

Если нужно получить в ячейке текст ссылки на диапазон типа "=E4:E27", то это делается простым щелчком и протягиванием, безо всяких контролов. Но еще лучше на StarBasic проанализировать таблицу и предложить юзеру выбор из списка именованных Столбцов/Строк. Кстати, в серьезных пакетах Анализ чувствительности делается автоматически по всем ключевым факторам, интерактивно ничего выбирать не нужно, тем более что можно промахнуться и выбрать несвязанные показатели.

Кстати, "по ту сторону Excel" - тамошний контрол RefEdit.ctrl (для выделения диапазонов немодально) - настолько глючен, что сам Microsoft его не рекомендует использовать. И приходится "лепить горбатого". 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

tagezi

#11
... удалено ...
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

rami

tagezi, на картинке form.png выравни надпись Диапазон факторов по вертикали по центру, а то она ломает горузонтальную линию с полем ввода.


Скажи, у тебя шорткаты (первые буквы с подчёркиванием) на русском работают? У меня если первая буква латинская — работает, а если русская, то нет.

tagezi

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

rami, посмотрю и отвечу через пару часиков... пойду погуляю, подышу свежим воздухом.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

JohnSUN

Ну, раз уж тут все взялись тебя поправлять и корректировать, то и я свои пять копеек вставлю: "...то ли уже мозги НЕ едут" (а чё, в самом деле! Нужно же к чему-нибудь докопаться?)  ;D  ;D  ;D
С кнопкой какая ерунда приключилась - действие "ОК", которое ты ей назначил, было бы нормально выполнено, если бы диалог запускался на выполнение (помнишь .execute?). А в случае visible/invisible нужно вешать на неё обычный обработчик.

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