Диалог без декора

Автор Narrnika, 10 февраля 2023, 00:36

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

Narrnika

Люди добрые, объясните идиоту - как?

Отключал заголовок в свойствах диалога в редакторе: "С заглавием" = "нет";
делал перед вызовом dialog.execute() в коде  dialog.getModel().Decoration = false;
пробовал startPopupMode (правда потом увидел, что оно в доках помечено как нерабочее);
делал диалог не модальным ( dialog.SetVisible(true) вместо dialog.execute() );
один фиг рисует у диалога рамку с заголовком.

А мне бы без неё как-нибудь...

Да, ещё видел com::sun::star::awt::WindowAttribute, но так и не въехал, куда это прикладывать - ни в свойствах диалога, ни в свойствах его модели вроде некуда - то ли это только для основных окон приложения, то ли просто лыжи не едут  ???
Ubuntu 20.04 / LibreOffice 6.4.7.2 / OpenOffice 4.1.7

economist

Тоже интересует. Если нужен splash screen - то, кмк, синяя полоса вверху, без названия, с крестиком закрытия - не особо-то и портят впечатление.

Решением может быть использование диалогов на Python, с его GUI-либами типа TKinter (и гораздо более современными). Большим плюсом диалогов на Python будет их вызов их скриптов Basic, ч/з invoke(), и возврат им же значений/статусов  обратно. Примеры на форуме были.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

sokol92

У меня есть "набросок" на подобную тему. Если успею доделать, то выложу на выходных.
Владимир.

Narrnika

Цитата: economist от 10 февраля 2023, 10:08Если нужен splash screen ...
нет, нужно что-то вроде панели автофильтра. Содержимое я примерно понял как сделать, а вот само "окно" превращаться в "контекстное меню/панель" не желает. Что не критично, но дико бесит, учитывая, что вроде как все свойства для этого есть. Но не работают. То ли я тупой, то ли кроме названий ничего не завезли.

Цитата: economist от 10 февраля 2023, 10:08Решением может быть использование диалогов на Python
может быть, но это когда нибудь потом, в отпуске... или на пенсии. Питон я когда то пользовал, но как его прикрутить к LO/OO - с наскоку не въехал, нужно вдумчиво раскуривать мануалы, а времени свободного нет почти.
Но за наводку спасибо, может и пригодится когда.
Ubuntu 20.04 / LibreOffice 6.4.7.2 / OpenOffice 4.1.7

sokol92

#4
Итак, обещанный пример диалога "без заглавия".
Во вложении - "учебный" пример. Библиотека DialogLib прилагаемого документа содержит модуль DialogResize и диалог Dialog3. В диалоге есть единственный элемент управления TextField1.

1. Макрос ResizableDialogTest показывает диалог на экране в не модальном режиме.

Отметим несколько моментов.

1.1. Диалог является перемещаемым и изменяемым в размерах. Можно в TextField1 вставить какой-нибудь текст и посмотреть, что происходит при изменении размеров диалога.
Диалог "помнит" свои последние размеры (в рамках одного запуска приложения LO).

1.2. Диалог запускается в не модальном режиме без использования циклов ожидания в макросах Basic.

1.3. Поскольку диалог может изменять размеры, то программа должна предусмотреть действия для изменения положения и размеров для элементов управления диалога. В данном примере всего один элемент управления, что позволяет решить эту проблему просто (см. обработчик события windowResized).

2. Служебная функция  CreateContainerWindow создает окно - контейнер для диалога.
Параметр функции  winAttr задает требуемые атрибуты окна. Можно, в частности, указать, что диалог является перемещаемым, изменяемым в размерах, имеет границы...

Параметр оTargetDoc задает документ, в котором будет показан диалог. Если значение этого параметра Nothing, то для диалога будет создано окно приложения верхнего уровня (с кнопками Свернуть, Развернуть, ...).

3. Служебная функции CreateInnerDialog указывает, откуда брать описание диалога - из библиотеки (документа или приложения) или из файла (в формате .xdl).
Описание диалога должно обязательно иметь свойство "С заглавием" - "Нет", если диалог в библиотеке, или атрибут withtitlebar="false", если диалог в файле.

4. Макрос NoTitleDialogTest запускает диалог "без заголовка" (не перемещаемый, не изменяемый в размерах).

Материал не является простым (на мой взгляд). По мере изучения могут возникнуть вопросы, на которые готов ответить (в рамках своей компетенции  :) ).
Владимир.

eeigor

Владимир, хороший результат. Долгожданный. Попыток разных было много создать resizible dialog. Отлично! Спасибо, что поделились.
Окно без заголовка у меня в Linux Ubuntu не прошло: заголовок остался. Но меня больше заинтересовал 1-й результат. Разбираться буду потом.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

Narrnika

Цитата: eeigor от 12 февраля 2023, 18:13Окно без заголовка у меня в Linux Ubuntu не прошло: заголовок остался.
Подтверждаю.

Да и решение по изменению размера, похоже, от системы зависит.. ну или я чего-то не понимаю, в частности - как этот размер менять:
Ubuntu 20.04 / LibreOffice 6.4.7.2 / OpenOffice 4.1.7

Narrnika

Цитата: sokol92 от 12 февраля 2023, 17:164. Макрос NoTitleDialogTest запускает диалог "без заголовка" (не перемещаемый, не изменяемый в размерах).
не изменяемый - ладно, но как он может стать не перемещаемым? Alt зажал и тащи куда хочешь..

Цитата: sokol92 от 12 февраля 2023, 17:16Материал не является простым (на мой взгляд)...
За материал в любом случае спасибо, обязательно изучим поподробней на досуге.
Ubuntu 20.04 / LibreOffice 6.4.7.2 / OpenOffice 4.1.7

sokol92

Цитата: Narrnika от 14 февраля 2023, 23:17как этот размер менять
Стандартным образом. Запускаете макрос, должен появиться диалог на экране. Далее, подводите мышь к границе диалога. Когда курсор примет форму двунаправленной стрелки, тянете за границу. Так же меняются и размеры встроенных диалогов LO (печати, параметров и т.д.).

Цитата: eeigor от 12 февраля 2023, 18:13Окно без заголовка у меня в Linux Ubuntu не прошло
Да, в Windows работает, в Linux - нет.
Владимир.

Narrnika

Цитата: sokol92 от 15 февраля 2023, 13:43...подводите мышь к границе диалога. Когда курсор примет форму двунаправленной стрелки...
Я развлекался этим минут пять - без какого либо эффекта (курсор не меняется, тянуть нечего). И только после этого попробовал через меню окна - а там пункт "изменить размер" залочен (обычно это не так, жмёшь не него - и окно переходит в режим изменения размера, как если бы тянуть за угол). См. скрин в предыдущем сообщении.

Возможно, дело не столько в разнице Windows/Linux, сколько в DE (desktop environment - среда рабочего стола). У меня сейчас MATE 1.24.0, как будет время - попробую на другой какой-нибудь проверить.
Ubuntu 20.04 / LibreOffice 6.4.7.2 / OpenOffice 4.1.7

sokol92

Я проверял на Windows, AstraLinux SE.
Владимир.

Narrnika

На Астре вроде сильно модифицированные кеды были. Не помню, как авторы своё детище назвали, но базировалось оно на KDE-3, если верить тем, кто в коде ковырялся.

Кстати, там среди свойств окна ничего типа "распахнуто"/"развёрнуто" нету?
Может система его воспринимает как раскрытое на весь экран - в таком режиме возможность изменять размер как раз блокируется.
Ubuntu 20.04 / LibreOffice 6.4.7.2 / OpenOffice 4.1.7

sokol92

#12
Проверил на Ubuntu 22.04 (gtk3) - размер изменяется.

Цитата: Narrnika от 15 февраля 2023, 15:54Кстати, там среди свойств окна ничего типа "распахнуто"/"развёрнуто" нету?
Если запустить диалог в окне верхнего уровня (см. закомментированную строку в ResizableDialogTest), то эти кнопки появятся.
Владимир.

Narrnika

#13
Цитата: sokol92 от 15 февраля 2023, 16:43Если запустить диалог в окне верхнего уровня...
Попробовал, появилась только кнопка "Свернуть".

Кстати, был уверен, что за это отвечает свойство dialog.model.DesktopAsParent.
Не пойму я никак эту систему :-[

Изменение модели ведь сразу транслируется в объект, ничего в ручную "обновлять" не нужно?
Ubuntu 20.04 / LibreOffice 6.4.7.2 / OpenOffice 4.1.7

sokol92

С трудом разыскал систему со старой AstraLinux, где изменение размеров диалога не происходит.
В окне-контейнере в свойствах отмечено, что окно минимизировано. Поговорю с системщиками на этот счет. Linux - не моя область компетенции.  :)
Владимир.