tagezi
|
В Calc, например, когда делаешь диаграмму, для указания диапазона используется диалоговое окно (см. картинку dialog). Меня интересует, как можно вызвать подобное окно из макроса и вернуть значение из него в переменную. В моём диалоговом окне есть, кнопочки (см. картинку form). Нажимая на них, пользователь должен иметь возможность выбрать ячейку или диапазон. И адрес на эту ячейку (диапазон) должен вставать в текстовое поле. Пример диалога ниже. Вот вопрос, можно ли использовать стандартное окно (и как) или нужно реализовывать своё? Спасибо за идеи.
|
|
|
Записан
|
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha
|
|
|
JohnSUN
|
Не смог найти полное решение (наверное, оно было не здесь, а на Инфра-Ресурсе). Но суть такова: Диалог оформляется и загружается как обычно, но запускается не через execute, а через show - это делает его не модальным, позволяет потыкать мышью в лист книги. Какая-то булева переменная следит за активностью окна - если кнопкой "Закрыть" переменную сбрасывают в False, окну диалога посылается команда .Hide Ну и по событию "изменение выделенной области" в нужное поле закидывается .getCurrentSelection().AbsoluteName. Подробнее не расскажу, давно было. Если не сделаешь - маякни, пороюсь в архивах, может, и сохранился где-то примерчик
|
|
|
Записан
|
|
|
|
tagezi
|
Не смог найти полное решение (наверное, оно было не здесь, а на Инфра-Ресурсе). Но суть такова: Диалог оформляется и загружается как обычно, но запускается не через execute, а через show - это делает его не модальным, позволяет потыкать мышью в лист книги. Какая-то булева переменная следит за активностью окна - если кнопкой "Закрыть" переменную сбрасывают в False, окну диалога посылается команда .Hide Ну и по событию "изменение выделенной области" в нужное поле закидывается .getCurrentSelection().AbsoluteName. Подробнее не расскажу, давно было. Если не сделаешь - маякни, пороюсь в архивах, может, и сохранился где-то примерчик
Спасибо, буду пробовать. Если не разберусь, буду маячить. 
|
|
|
Записан
|
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha
|
|
|
rami
|
А как ты до таких окон добрался?
|
|
|
Записан
|
|
|
|
tagezi
|
А как ты до таких окон добрался? Разрабатываю программный модуль анализа чувствительности инвестиционного проекта... Почти всё реализовано, остались мелкие штуки, типа этой, и ещё пару. Диплом защищаю 27 числа, хочу более менее нормальную штуку отдать... Вот так и добрался... Как-то так  Потом потихоньку допилю до нормального состояния и выложу в общий доступ.
|
|
|
Записан
|
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha
|
|
|
rami
|
Разрабатываю программный модуль анализа чувствительности инвестиционного проекта... Ты сам сделал эти окна в редакторе диалогов? Или как?
|
|
|
Записан
|
|
|
|
tagezi
|
Ты сам сделал эти окна в редакторе диалогов? Или как? Да, в редакторе диалогов. Что-то я не смог нормально осилить как это всё в коде делать... да и проще так, по крайне мере на этом этапе, не нужно задавать кодом позиционирование. А маленькое окошко я пока не делал, но видимо придется.
|
|
|
Записан
|
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha
|
|
|
JohnSUN
|
Да не стоит, наверное, с мелким окном заморачиваться - возни много, а результат тот же.
|
|
|
Записан
|
|
|
|
JohnSUN
|
Ага, нарыл... Не помню, для кого писал и зачем, что эта бодяга должна была делать тоже не помню - все-таки 4 года прошло. Но диалог работает, кажется, так, как ты и задумывал
|
|
|
Записан
|
|
|
|
tagezi
|
Ага, нарыл... Не помню, для кого писал и зачем, что эта бодяга должна была делать тоже не помню - все-таки 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
|
... удалено ...
|
|
« Последнее редактирование: 22 Июнь 2016, 09:30 от tagezi »
|
Записан
|
(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
|
Ну, раз уж тут все взялись тебя поправлять и корректировать, то и я свои пять копеек вставлю: "...то ли уже мозги НЕ едут" (а чё, в самом деле! Нужно же к чему-нибудь докопаться?)  С кнопкой какая ерунда приключилась - действие "ОК", которое ты ей назначил, было бы нормально выполнено, если бы диалог запускался на выполнение (помнишь .execute?). А в случае visible/invisible нужно вешать на неё обычный обработчик. Передохни - ты, похоже, действительно перенапрягся. В таком состоянии ничего путного не высидишь
|
|
|
Записан
|
|
|
|
|