Хотелки от пользователей :-)

Автор MWW_Ruza, 19 февраля 2024, 22:01

« назад - далее »

АЛьФ

#15
Цитата: Chai Nic от 20 февраля 2024, 16:52Так там и прочие атрибуты придется двигать, которые снизу и справа ТЧ. Нетривиально и возможно не получится повторить штатное поведение.

Для этого есть замечательный класс Общие.Форма.Привязка. Можно именно как класс 1С++ использовать или надергать оттуда готового кода.

Arbuz

Цитата: АЛьФ от 19 февраля 2024, 22:22...
Есть предопределенная, которая, вроде как, перехватывает сообщения и может их глушить.
Процедура ПриПолученииКомандыГлавнымОкном(wParam, lParam, СтандартнаяОбработка)
    Сообщить("Команда главному окну:" + wParam + ", " + lParam);
КонецПроцедуры
...
Дык, в том то и проблема, что не "перехватываются команды тулбаров форм документов/справочников/журналов". Из общих панелей, из меню Действия, Горячие клавиши — перехватываются, а из панели инструментов формы те же действия — нет.

АЛьФ

Цитата: Arbuz от 20 февраля 2024, 16:58
Цитата: АЛьФ от 19 февраля 2024, 22:22...
Есть предопределенная, которая, вроде как, перехватывает сообщения и может их глушить.
Процедура ПриПолученииКомандыГлавнымОкном(wParam, lParam, СтандартнаяОбработка)
    Сообщить("Команда главному окну:" + wParam + ", " + lParam);
КонецПроцедуры
...
Дык, в том то и проблема, что не "перехватываются команды тулбаров форм документов/справочников/журналов". Из общих панелей, из меню Действия, Горячие клавиши — перехватываются, а из панели инструментов формы те же действия — нет.

Понял. Буду смотреть.

alyuev

Подтверждаю. Когда делал перехват кнопок тулбаров пришлось использовать класс DWX.ToolBar

Сам себе оставлял такой комментарий:

//Правда ПриПолученииКомандыГлавнымОкном() сам по себе почему-то некоторые кнопки панели не перехватывает. А с помощью класса DWX.ToolBar - получается.
//Он перехватывает и далее уже отрабатывает ПриПолученииКомандыГлавнымОкном
//DWX.ToolBar -> ButtonClick() -> ПодменитьСистемноеДействие() -> ОткрытьСистемноеОкно() -> ПриПолученииКомандыГлавнымОкном()

Здесь: ButtonClick() - это событие класса DWX.ToolBar.
ПодменитьСистемноеДействие() и ОткрытьСистемноеОкно() - это мои функции. Из последней вызывается код:

ТекстМодуля = "
	|Public Const WM_COMMAND = &h111
	|Public Sub GetUsersWindow()
	|	Set Wrap = CreateObject(""DynamicWrapperX"")
	|	Wrap.Register ""USER32"", ""GetForegroundWindow"", ""f=s"", ""r=l""
	|	Wrap.Register ""user32"", ""SendMessage""	 ,  ""i=hull""	, ""r=l""
	|	Res = Wrap.SendMessage(Wrap.GetForegroundWindow(), WM_COMMAND, "+КодОкна+", 0)
	|End Sub";
	мScrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
	мScrptCtrl.Language = "vbscript";мScrptCtrl.AddCode(ТекстМодуля);
	мScrptCtrl.CodeObject.GetUsersWindow();

И отсюда уже попадает в ПриПолученииКомандыГлавнымОкном().

Chai Nic

Решил попробовать "закат солнца вручную" с установкой размеров таблицы на форме при изменении размеров формы. На немодальных формах всё более-менее предсказуемо. А на модальных ересь какая-то происходит. Абсолютно одна и та же форма в немодальном режиме модифицируется корректно, а в модальном - как-то по странному. Такое ощущение, что в модальном режиме применяются какие-то непонятные коэффициенты к значениям высоты и ширины. Что это может быть и как с этим бороться?

Тестовый пример по ссылке. https://disk.yandex.ru/d/EJgyL6r7IZQnFw

Там одна и та же форма открывается в немодальном и модальном режиме, а после открытия происходит модификация размеров таблицы под размеры формы.


Злоп

Там вроде что-то с шрифтом, который считается стандартным для модального окна.
.
И можно отказаться от модального окна, жмулируя его немодальным, с ко орого нельзя уйти

Злоп

Ещё иногда хочется ПРОСТЫМ методом положить кнопку (типа как стандартная кнопка с действием на форме) на тулбар формы (по крайней мере для внешних обработок) - это тулбар где кнопки сохранить/восстановить значенмн

Злоп

Цитата: Chai Nic от 20 февраля 2024, 16:52
Цитата: АЛьФ от 20 февраля 2024, 16:32Так просто измени размер многострочной части так же, как меняешь размер формы. Через АтрибутФормы.УстановитьКоординаты().
Так там и прочие атрибуты придется двигать, которые снизу и справа ТЧ. Нетривиально и возможно не получится повторить штатное поведение.
А не надо делать много извращений на форме. Попроще надо...

Chai Nic

#23
Цитата: ЗлопТам вроде что-то с шрифтом, который считается стандартным для модального окна.
Ну а при чем тут шрифт, если размеры задаются в пискелах?

Цитата: ЗлопИ можно отказаться от модального окна, жмулируя его немодальным, с ко орого нельзя уйти
Не, нельзя. Модальное окно оно не просто так из вредности, а потому что оно должно при закрытии вернуть некие значения, которые надо обработать. Если открыть обычное окно, то не будет останова выполнения и ожидания результата в вызывающей процедуре.

Цитата: ЗлопА не надо делать много извращений на форме. Попроще надо...
Хочется сделать универсальное глобальное решение "расширятель модальных окон", не ковыряясь в конкретных формах.

АЛьФ

#24
А вот так все работает:

Процедура Отрисовка()
    Расш=СоздатьОбъект("РасширениеФормы");
    АтрТаблица=Расш.ПолучитьАтрибут("Таблица");
    АтрТаблица.УстановитьКоординаты(,,Расш.Ширина-50,Расш.Высота-50);
КонецПроцедуры

Процедура Выполнить()
    Расш=СоздатьОбъект("РасширениеФормы");
    Расш.Высота = 350;
КонецПроцедуры             

Процедура ПослеСозданияФормы()
    Отрисовка();
КонецПроцедуры // ПослеСозданияФормы
          
Процедура ПриИзмененииРазмераОкна(ТипСобытия,ШиринаФормы,ВысотаФормы)  
    Отрисовка();
КонецПроцедуры

Chai Nic

#25
Цитата: АЛьФ от 21 февраля 2024, 09:24А вот так все работает:

Да всё равно не работает как положено. Сразу после открытия (ПослеСозданияФормы()) в модальном окне таблица растягивается слишком близко к краю, явно не на 50 пикселей, залезая на кнопки.

Потом, когда нажать на кнопку, то в процедуре Выполнить отрисовывается корректно в немодальной, а в модальной тоже "перебор".

https://disk.yandex.ru/i/qL_IR4UeAidbrg

leov-001

Вы не можете просматривать это вложение.

Chai Nic

А мне не надо придавливать таблицу к левому верхнему углу. Там свои элементы управления есть.

Интересно, когда координаты угла 0,0, то в модальном окне не отрисовывается панель инструментов формы, и размеры ставятся верно. Если даже убрать 0,0, но при этом отключить панель галочкой в свойствах формы - тоже нормально.

То есть, панель инструментов виновата в этом глюке модальной формы, получается. Ну и независимо от этого, модальная форма всегда чуток меньше обычной при прочих равных, причем не на толщину рамки обычной формы, а ещё меньше. Как будто платформа при выводе модальной формы реально применяет какой-то "уменьшающий коэффициент". А методы и атрибуты РасширениФормы этого не учитывают.

АЛьФ

FormEx возвращает клиентскую область окна. Но выходит, что 1С в модальных окнах рисует тулбар прямо в клиентской области. Из-за этого и получается сдвиг. Я так понимаю.
Непонятно как это учитывать. Если ввести поправочный коэффициент какой-то, то у людей формы поедут, которые уже учитывают такое поведение в возврате координат. Нехорошо.

Djelf

#29
Поедет, конечно поедет и непредсказуемо поедет и мне кажется не только это.
Есть еще Окна.РазмерОкна(Форма,Ширина,Высота,Стиль,Параметр) и РасширениеФормы.Высота
Высота почти везде немного отличается, насколько я помню.
Я бы не стал менять текущее поведение, кодить не так чтобы много, а вот проверять соответствие высоты во всех возможных сочетаниях довольно муторно.
Кто с этим столкнулся уже какие-то коэффициенты и сдвиги внедрил.
Разве что сделать ТекущийВариантРасчетаФорм = Сервис.ВариантРасчетаКоординатФорм(Вариант)
Где Вариант=ПустоеЗначение,1,2,3...