Тестовая сборка обновлена.
Сообщения от тулбаров теперь транслируются в ПриПолученииКомандыГлавнымОкном().
Я так понимаю, это "по мотивам моей хотелки" - ?
Что-то я не понял, как это должно работать...
В глобальный модуль, помещаю такую процедуру:
Процедура ПриПолученииКомандыГлавнымОкном(wParam, lParam, ФСО)
Если wParam = 32890 Тогда
ФСО = 0;
Предупреждение("Нажали перенос в другую группу!");
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры
В справочнике "Номенклатура" нажимаю "Перенести в группу". Отрабатывает, сообщает мое предупреждение: "Нажали перенос в другую группу!"... Прекрасно... Сюда, я могу запихнуть что хочу - например, вопрос "Перенести <10> выделенных элементов в из группы XXX группу YYY - ?". Но, дальше, при нажатии ОК, появляется стандартное сообщение - "Перенести хлемент ХХХ в группу УУУ - ?"... ФСО = 0 не помогает, СтатусВозврата(0) тоже...
Что я не так делаю? Как правильно подавить стандартное системное сообщение, подменив его на свое?
https://forum.dorex.pro/index.php?topic=63.0
Аааа... Не заметил это сообщение, точнее, увидел, но не придал значения - по названию, "Проблема с отменой", не понял, что речь идет именно об этой отмене... Думал "сам дурак", немогу в трех строчках кода разобраться, пробовал "и так и этак" результат один...
Тут еще, как я понимаю, кроме подмены месаги, нужно и действие команды прервать...
Из als:
<СтандартнаяОбработка> - флаг стандартной обработки, при установке в ноль, системная обработка сообщения не будет вызвана.
При установке в процедуре статуса возврата в ноль, системная обработка сообщения не будет вызвана.
ФСО, по идее, должен подавлять вывод стандартного сообщения(вопроса?), а СтатусВозврата(0) прерывать стандартное действие совсем...
Иначе, даже если я подменю текст вопроса на свой, а пользователь нажмет в этом диалоге "Нет", то как этот "Нет" передать в команду...
Т.е., если нет в процедуре СтатусВозврата(0), то команда должна отработать штатно, только при выставленном ФСО=0 не выводить текст вопроса/сообщения(мы это можем сами сделать, эмулировав это окошко с вопросом).
А если нужно, что-бы действие не выполнилось - тогда СтатусВозврата(0)...
Цитата: MWW_Ruza от 24 марта 2024, 10:01Аааа... Не заметил это сообщение, точнее, увидел, но не придал значения - по названию, "Проблема с отменой", не понял, что речь идет именно об этой отмене... Думал "сам дурак", немогу в трех строчках кода разобраться, пробовал "и так и этак" результат один...
Тут еще, как я понимаю, кроме подмены месаги, нужно и действие команды прервать...
Из als:
<СтандартнаяОбработка> - флаг стандартной обработки, при установке в ноль, системная обработка сообщения не будет вызвана.
При установке в процедуре статуса возврата в ноль, системная обработка сообщения не будет вызвана.
ФСО, по идее, должен подавлять вывод стандартного сообщения(вопроса?), а СтатусВозврата(0) прерывать стандартное действие совсем...
Иначе, даже если я подменю текст вопроса на свой, а пользователь нажмет в этом диалоге "Нет", то как этот "Нет" передать в команду...
Т.е., если нет в процедуре СтатусВозврата(0), то команда должна отработать штатно, только при выставленном ФСО=0 не выводить текст вопроса/сообщения(мы это можем сами сделать, эмулировав это окошко с вопросом).
А если нужно, что-бы действие не выполнилось - тогда СтатусВозврата(0)...
На самом деле обработка статуса возврата - это изначальная ошибка. Т.е. была завязка на статус возврата, а потом сделал ФСО, чтобы было единообразно с остальными. Статус возврата оставлен был для совместимости.
В новой обработке команд статус возврата уже не будет учитываться. Так что не надо на него ориентироваться.
Стандартная команда либо выполняется, либо нет. Невозможно сделать, чтобы вопрос не задавался, а обработка была стандартной. Если отменяешь стандартную обработку, то все берешь на себя.
Переделал сейчас обработку команд от тулбара. Нашел еще, что в модальных окнах обработка не перехватывало.
Попробуй с этой версией посмотреть.
Под твою задачу сейчас работаю над методом получения текущего значения из дерева папок.
Обрати внимание: https://forum.dorex.pro/index.php?msg=753
Цитата: АЛьФ от 24 марта 2024, 11:06Под твою задачу сейчас работаю над методом получения текущего значения из дерева папок.
Как раз делал настройку видимости дерева... "Видимость" устанавливается, а вот чтение это свойства всегда пустое.
Интересно установить значение для дерева.
По теме "СУПЕР!!!"
Еще интересно было бы управлять доступностью кнопок тулбара (реально "Новый"), нет доступности при установленном отборе в справочнике и при отключенной иерархии
Цитата: sau от 24 марта 2024, 16:53Еще интересно было бы управлять доступностью кнопок тулбара (реально "Новый"), нет доступности при установленном отборе в справочнике и при отключенной иерархии
Они и должны быть недоступны в этом случае. Если отключена иерархия, то движок не знает какого родителя или владельца устанавливать для новых элементов.
Цитата: АЛьФ от 24 марта 2024, 17:15Цитата: sau от 24 марта 2024, 16:53Еще интересно было бы управлять доступностью кнопок тулбара (реально "Новый"), нет доступности при установленном отборе в справочнике и при отключенной иерархии
Они и должны быть недоступны в этом случае. Если отключена иерархия, то движок не знает какого родителя или владельца устанавливать для новых элементов.
Это понятно... Но можно оставить родителя пустым или установить какое-то значение (новый элемент может создаваться в диалоге, т.е. по Insert все рабоает, неплохо бы и из тулбара) , т.е. важно опять же возможность, а что потом решим, т.е. обработка нажатия все равно будет перехвачена
Цитата: sau от 24 марта 2024, 17:23Цитата: АЛьФ от 24 марта 2024, 17:15Цитата: sau от 24 марта 2024, 16:53Еще интересно было бы управлять доступностью кнопок тулбара (реально "Новый"), нет доступности при установленном отборе в справочнике и при отключенной иерархии
Они и должны быть недоступны в этом случае. Если отключена иерархия, то движок не знает какого родителя или владельца устанавливать для новых элементов.
Это понятно... Но можно оставить родителя пустым или установить какое-то значение (новый элемент может создаваться в диалоге, т.е. по Insert все рабоает, неплохо бы и из тулбара) , т.е. важно опять же возможность, а что потом решим, т.е. обработка нажатия все равно будет перехвачена
Я как-то пытался сделать предопределенную процедуру, в которой можно было бы определить доступность пунктов меню или кнопки тулбара. Но в винде это так реализовано, что возникают просто дикие тормоза.
Цитата: sau от 24 марта 2024, 16:47Цитата: АЛьФ от 24 марта 2024, 11:06Под твою задачу сейчас работаю над методом получения текущего значения из дерева папок.
Интересно установить значение для дерева.
Сделал установку, но тут вылезла проблема - 1С заполняет это дерево при раскрытии ветки. Очевидно, это сделано для оптимизации построения дерева. Надо бы было копать команду "Найти в дереве", но пока я сделал "в лоб" - при поиске просто раскрываю ветки дерева, а потом их сворачиваю.
Вроде работает, но нарушает свернутость/развернутость дерева. И явно будет тормозить на сложных справочниках.
Буду еще думать как переделать.
Цитата: АЛьФ от 24 марта 2024, 18:53Цитата: sau от 24 марта 2024, 16:47Цитата: АЛьФ от 24 марта 2024, 11:06Под твою задачу сейчас работаю над методом получения текущего значения из дерева папок.
Интересно установить значение для дерева.
Сделал установку, но тут вылезла проблема - 1С заполняет это дерево при раскрытии ветки. Очевидно, это сделано для оптимизации построения дерева. Надо бы было копать команду "Найти в дереве", но пока я сделал "в лоб" - при поиске просто раскрываю ветки дерева, а потом их сворачиваю.
Вроде работает, но нарушает свернутость/развернутость дерева. И явно будет тормозить на сложных справочниках.
Буду еще думать как переделать.
Можно дать возможность позиционировать на доступный элемент, т.е. уже развернутый (сформированный 1С), но дать возможность разворачивать группу. Тогда каждый желающий может сам построить поиск элемента по дереву и определить долго это или нет (нужно ему такое или нет)
Да, на новой тестовой сборке, это:
Процедура ПриПолученииКомандыГлавнымОкном(вПарам, иПар, ФСО)
Если вПарам = 32890 Тогда
ФСО = 0;
Если Вопрос("Нажали перенос в другую группу, выполнить?", 4) = 7 Тогда
СтатусВозврата(0);
Иначе
ФСО = 1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
отрабатывает, если нажать "НЕТ", то без всяких лишних месаг перенос отменяется, все ОК.
А вот если нажать "ДА", то без ФСО = 1 ничего не происходит, процедура не отрабатывает, так же как и при "НЕТ", несмотря на то, что СтатусВозврата(0) при этом не вызываетсся... А в том виде, как процедура выше, перенос происходит, но и стандартная месага при нажатии на ДА вылезает(ФСО то = 1)...
Я это предвидел, поэтому и писал выше, что "хорошо-бы разделить вывод месаги и поведение самой процедуры", если это в принципе возможно...
А если нет, то то надо в любом случае делать ФСО = 0, и переносить "пешком" элементы, меняя их родителя в цикле.... В принципе - терпимо, можно и так конечно, для моей задачи вполне пойдет. :-)
Да, без этого- "Под твою задачу сейчас работаю над методом получения текущего значения из дерева папок."
похоже не решить эту задачу... Удалить(пометить) несколько элементов - нет проблем.
А вот перенести в другую группу, не получится... Целевую группу я определяю через "ПриПереносеЭлементаВДругуюГруппу(Эл, ЦелГр)", предопределенную в форме списка справочника... Но, тут, при применении процедуры ПриПолученииКомандыГлавнымОкном(вПарам, иПар, ФСО) она не отрабатывает, поэтому, непонятно куда переносить...
И кроме того, изменилось поведение этой процедуры, она "типа зациклилась", просто при открытии отладчика, похоже начинает самопроизвольно перебирать все элементы открытого окна... В предыдущих версиях, такого небыло. Может не понятно объяснил, вот видео: https://cloud.mail.ru/public/pVGw/zPmUh6SUt
Раньше, я спокойно ставил в отладчике точку останова внутри процедуры, нажимал нужную мне кнопку, и получал числовое значение, ей соответствующее. Теперь, это сделать не получается, отладчик срабатывает сразу, как будто эта процедура выполняется непрерывно, "сама по себе", без моих действий...
Вот, еще видео, то-же самое, но менее "сумбурное", более продуманное и понятное: https://cloud.mail.ru/public/thfn/t5UJQpkUH
Раньше не все командные сообщения попадали в предопределенную процедуру. Сейчас туда идет все. Отсюда и эти сложности в отладке.
Это и нагрузку лишнюю создает, поэтому вечером буду дорабатывать. Сделаю, чтобы если в процедуре ПриПолученииКомандыГлавнымОкном флаг стандартной обработки установлен в -1, то команда больше не перехватывается. Это снизит нагрузку и позволит перехватывать только нужные команды.
Цитата: АЛьФ от 25 марта 2024, 09:09Раньше не все командные сообщения попадали в предопределенную процедуру. Сейчас туда идет все. Отсюда и эти сложности в отладке.
Это и нагрузку лишнюю создает, поэтому вечером буду дорабатывать. Сделаю, чтобы если в процедуре ПриПолученииКомандыГлавнымОкном флаг стандартной обработки установлен в -1, то команда больше не перехватывается. Это снизит нагрузку и позволит перехватывать только нужные команды.
Сделано.
Хм, это как? Можно пример с -1 ?
Цитата: Злоп от 25 марта 2024, 21:08Хм, это как? Можно пример с -1 ?
Процедура ПриПолуПриПолученииКомандыГлавнымОкномченииКомандыГлавнымОкном(wParam, lParam, СтандартнаяОбработка)
Если wParam = 32890 Тогда
Сообщить("Перенос в другую группу");
Иначе
Сообщить("ПриПолученииКомандыГлавнымОкном: " + wParam + ", " + lParam);
СтандартнаяОбработка = -1;
КонецЕсли;
КонецПроцедуры
И что это значит? что если попали в ветку -1 - то после этого вход в ПриПолученииКОманды - больше вообще выполняться не будет? Или как?
Цитата: Злоп от 25 марта 2024, 21:57И что это значит? что если попали в ветку -1 - то после этого вход в ПриПолученииКОманды - больше вообще выполняться не будет? Или как?
Для команды, которая в этот момент была в wParam больше не будет вызываться. Команда относится ещё на этапе перехвата и не будут тратиться ресурсы на вызов предопределенной процедуры.
Цитата: АЛьФ от 25 марта 2024, 22:18Для команды, которая в этот момент была в wParam больше не будет вызываться. Команда относится ещё на этапе перехвата и не будут тратиться ресурсы на вызов предопределенной процедуры.
типа вот так и внести в ALS, это как-то более понятно, чем ранее описанное
Что-то у меня теперь ПриПолученииКомандыГлавнымОкном() совсем стало непонятно работать. Например при только открытии меню Операции последовательно прилетают все коды из подпунктов этого меню. И как теперь отличать нажатие на меню Операции от нажатия пункта Константы из него?
Также при запуске открывается ИнфоБлок и пока его не закроешь всё время летят, в том числе, коды 32848 и 32849 - а это калькулятор и календарь из меню Сервис.
ЗЫ: Это происходит только если открыто любая форма или таблица. Если дочерних окон нет, то всё работает как надо.
Ещё стало задваивать команды, например в журнале документов Изменить время документа стало отрабатывать дважды, раньше было однократно.
ЗЫ: в версии от 17.03.24 срабатывает однократно.
Также задваивает, например, закрытие "крестиком" формы документа код 61536.
Что-то совсем сломалось в отлове команд. Почему-то сыпятся команды, которые идут на проверку доступности. Но не все и не всегда. Пытаюсь разобраться....
Основную массу постоянно идущих команд я отсеил.
Но с двойной обработкой проблема остается.
Может кто что подскажет?
У меня сейчас стоит перехват MainWndProc главного окна. Этот перехват стоял на команды изначально (отсюда и название процедуры ПриПолученииКомандыГлавнымОкном), туда не попадаю команды с тулбаров и модальных окон(очевидно).
Теперь был добавлен перехват CTabFrame::OnCmdMsg() и CGetDlg::OnCmdMsg().
Теперь получается, что команды из контекстного меню не модального окна попадают в оба перехвата и, соответственно, для них получается два вызова предопределенной процедуры. Это не создает проблем, если стандартная обработка отменяется, в перехвате MainWndProc прерывается обработка сообщения и до OnCmdMsg оно уже не доходит. Но вот если требуется что-то выполнить по команде и пустить дальше, то... Проблема...
Мда... В очередной раз убеждаюсь, что проговаривание проблемы помогает в ее решении.
Убрал обработку сообщения WM_COMMAND из перехвата MainWndProc и добавил перехват OnCmdMsg() главного окна. Ушла еще часть двойных вызовов. Но все равно остаются какие-то двойные вызовы. Боюсь, что с этими придется как-то мириться.
Обновил тестовую сборку, прошу глянуть.
Цитата: АЛьФ от 26 марта 2024, 21:43Боюсь, что с этими придется как-то мириться.
это как-то некузяво...
непонятно к чему это может привести и надо ли с этим как-то бороться...
эти двойные вызовы идут один за другим, не прерываясь пользовтаельским кодом ВНЕ процедцры ПриПолученииКоманды..? Если так - то бороться: глобальную переменную (присвоено=0), ПриПолученииКоманды... если глобпеременная = 0 - обрабатывать команду, глобПеременная=1, если глобпеременная=1 - команду не обрабатывать (обработана ранее), глобпеременная=0.
.
типа так как-то первое что приходит в голову... но если вдруг тройной дубляж...?
.
мне кажется, что лучше при невозможности избавиться от такого глюка - откатиться назад на тот вариант отработки команд (пусть даже не всех желаемых), когда глюка не было. Закладывать мину - так себе идея... Или, по крайней мере сделать настройку типа Сервис.ИспользоватьПроблемнуюОбработкуКоманд(0/1) - кому надо пусть включает код по новой ветке обработки команд и ходит по минному пол..
.
типа так как-то...
Это не глюк, а особенность обработки команд в режиме перехвата.
Попробую более наглядно описать на примере одинесного кода.
Допустим, имеем в глобальном модуле:
Процедура глПерехват() Экспорт
Сообщить("Тут наш перехват");
КонецПроцедуры
Процедура Глобальная_ПриОткрытии()
глПерехват();
КонецПроцедуры
Далее в какой-то форме у нас написано:
Процедура ПриОткрытии()
глПерехват();
КонецПроцедуры
Итак, попадаем в глПерехват из двух разных мест. В самой это процедуре мы не можем определить откуда именно мы туда попали, надо ли обрабатывать сообщение или нет. Ведь мы может открыть форму и без ПриОтркытии, тогда вызов глПерехват будет только один. А если в Глобальная_ПриОткрытии() поставим СтатусВозврата(0), то локальная ПриОткрытии вызываться не будет и вызов глПерехват всегда будет только один.
В винде примерно так и обрабатываются команды. Только некоторые сразу идут в нужное окно, а некоторые сначала главному окну, и только если оно не отрабатывает команду, дальше по маршруту отправляются в дочернее окно. Пока непонятно какие команды задваиваются. Может они вообще никогда не понадобятся в обработке.
Сегодня во время прогулки решил, что надо в ПриПолученииКомандыГлавнымОкном вторым параметром (который сейчас всегда равен 0), передавать контекст, которому отправлена команда. Это будет либо контекст окна, либо пустое значение, если это команда главному окну.
Больше ничего в голову не приходит.
У меня пока только одна команда задваивается - 57670. Это вызов помощи (при нажатии F1 или из главного меню).
Задваивается очень странно. Запускаю 1С в режиме Предприятия, открываю форму списка справочника (любого), тыкаю на любую строку, выпадает два раза обработка команды 57670, но без попытки открыть помощь (надеюсь, все знают, что в новых версиях винды старая помощь выдает ошибку и перенаправляет на сайт мелкомягких). Впечатление, что винда посылает команду в режиме проверки доступности. Но у меня стоит на это отсечки и в перехват отправляются только команды, которые на исполнение подаются.
Я в растерянности...
Нужна помощь зала в отлове задваивающихся сообщений и условий, при котором они стабильно проявляются.
Ах, да, забыл добавить, что задвоенная команда появляется только при первом открытии. При повторном открытии формы списка команды уже нет.
Еще вспомнил, что та же команда выпадает при таком же первом открытии формы с ТЗ.
Еще накопал. Похоже, что связано с тем же прохождением команды.
Если открыта форма тестового или табличного документа, то команды не приходят в перехват.
Очень полезная статья на тему: https://www.rsdn.org/article/mfc/maze.xml
Многое становится понятным. И ведь помню, что когда-то читал ее... Только немного другое в то время меня интересовало.
Есть надежда что бета-версия 197 все-таки выйдеТ в релиз без ощутимых глюков7
Цитата: Злоп от 27 марта 2024, 12:37Есть надежда что бета-версия 197 все-таки выйдеТ в релиз без ощутимых глюков7
Глюки всегда есть и всегда будут. Я ж давно уже сборку 197 выложил в качестве релиза. Сейчас в тестовой версия уже 198.
Цитата: АЛьФ от 27 марта 2024, 12:27Многое становится понятным. И ведь помню, что когда-то читал ее... Только немного другое в то время меня интересовало.
Вы профи в этих вопросах конечно.
1С никогда не ковырял.
Она использует MFC.
В MFC не скажу, что профи был, но ранее её использовал (затем WTL стал использовать).
Далее немного о метаданных диалоговых форм 1С.
Как-то разработал функцию, котороая конвертировала метаданные любой диалоговой формы в бинарный формат WIN APi.
Так вот можно было использовать эту функцию для создания новых окон в 1С и использовать бинарный формат для создания диалоговых форм.
Для фана весьма забавно было в режиме Предприятия создавать любую диалоговую форму конфигуратора.
Развивать функционал не стал.
Пост был о том, что в какой-то мере можно на лету добавлять или изменять диалоговые формы 1С.
Например без проблем можно обеспечить то, чтобы в конфигураторе можно было растягивать любое диалоговое окно, так как в нём диалоговые формы не удобны.
Можно новый конфигуратор а-ля 1С 7.7 разработать.
Ради фана разработаю, так как разрабатываю свой вариант GUI на OpenGL.
Это не хвастовство, так как сказанное подкреплено реальной разработкой.
Цитата: Forum123 от 27 марта 2024, 13:01Это не хвастовство, так как сказанное подкреплено реальной разработкой.
Непонятно вообще о чем это и зачем. Есть OpenConf с кучей разных плагинов, есть TurboMD, есть GComp, есть куча концептуальных статей по структуре md.
О чем вы вообще?
Цитата: АЛьФ от 27 марта 2024, 13:13О чем вы вообще?
О том, что с диалоговыми формами 1С можно работать вообще не зная как 1С устроена.
У меня имеется ActiveX, который имеет много функционала для работы с диалоговыми формами.
Альф пост к Вам как разработчику.
Вы конечно знаете как работает 1С с диалоговыми формами, но многий функционал "на коленке" можно разработать зная как устроены окна MFC.
Это никоим образом не критика Вас как разработчика.
Цитата: Forum123 от 27 марта 2024, 13:01Можно новый конфигуратор а-ля 1С 7.7 разработать.
Есть уже, Intelligent (https://disk.yandex.by/d/k-xTxfI1v2Soog) называется, позабыт позаброшен.
Цитата: item от 27 марта 2024, 13:30Есть уже, Intelligent (https://disk.yandex.by/d/k-xTxfI1v2Soog) называется, позабыт позаброшен.
Ньюанс в том, что у меня разработано API для работы с метаданными.
Это позволит разработать конфигуратор, который будет не хуже чем в 1С 8.x.
В основном то о чём сказал больше мне нужно для тестирования своего GUI.
Чем придумывать какие-то отладочные примеры лучше реализовать полезный tools.
Зря об это рассказал.
Цитата: Forum123 от 27 марта 2024, 13:23Цитата: АЛьФ от 27 марта 2024, 13:13О чем вы вообще?
О том, что с диалоговыми формами 1С можно работать вообще не зная как 1С устроена.
У меня имеется ActiveX, который имеет много функционала для работы с диалоговыми формами.
Альф пост к Вам как разработчику.
Вы конечно знаете как работает 1С с диалоговыми формами, но многий функционал "на коленке" можно разработать зная как устроены окна MFC.
Это никоим образом не критика Вас как разработчика.
Конечно можно. Ваще без вопросов. Многие это и делали в свое время. Только зачем? Интересна ведь в первую очередь именно связка с объектами 1С и расширенное управление именно объектами 1С.
Для примера. Я могу сделать в 1С с помощью MFC двойную форму (дочернее окно, объединяющее две вьюшки), могу сделать "плавающее окно". Но зачем они сами по себе? Интересно ведь сделать в конфигураторе форму, прописать ей всю логику работы и запулить в режиме Предприятия в "плавающем" виде. Или взять и объединить две формы - элемента справочника и списка подчиненного элемента с сохранением для них полного функционала.
Цитата: Forum123 от 27 марта 2024, 13:38Цитата: item от 27 марта 2024, 13:30Есть уже, Intelligent (https://disk.yandex.by/d/k-xTxfI1v2Soog) называется, позабыт позаброшен.
Ньюанс в том, что у меня разработано API для работы с метаданными.
Это позволит разработать конфигуратор, который будет не хуже чем в 1С 8.x.
В основном то о чём сказал больше мне нужно для тестирования своего GUI.
Чем придумывать какие-то отладочные примеры лучше реализовать полезный tools.
Зря об это рассказал.
Может проще создать в разделе дружественных проектов свою ветку, где рассказать о своей разработке и дать ссылку, где можно скачать и подробно изучить?
Цитата: АЛьФ от 27 марта 2024, 09:49Если открыта форма тестового или табличного документа, то команды не приходят в перехват.
Да, есть такое. Остальное вроде как починилось, F1 не двоится, хотя он у меня тоже заблокирован.
Еще бы во внешней форме кнопки как у справочника/документа вытащить и было бы совсем хорошо.
Цитата: АЛьФ от 27 марта 2024, 13:43Может проще создать в разделе дружественных проектов свою ветку, где рассказать о своей разработке и дать ссылку, где можно скачать и подробно изучить?
Альф ты уж извини, что о своих разработках рассказал.
В основном, чтобы не выглядеть диванным теоретиком.
Пост то был о том, некоторый функционал для диалоговых окон можно расширить и не зная того, как с ними работает 1С.
Хотя безусловно для Тебя это не новость.
Контекст в ПриПолученииКомандыГлавнымОкном в принципе не нужен, а вот флаг того что это команда от тулбара весьма бы пригодился. Проброс в форму через АктивныйКонтекст работает нормально.
Сервис.АктивныйКонтекст(Конт);
Список=СоздатьОбъект("СписокЗначений");
Список.ДобавитьЗначение(wParam);
Если Сервис.ВыполнитьПроцедуру(Конт,"ПриПолученииКоманды",Список)=1 Тогда
СтатусВозврата(0);
КонецЕсли;
Цитата: Djelf от 27 марта 2024, 14:06Контекст в ПриПолученииКомандыГлавнымОкном в принципе не нужен, а вот флаг того что это команда от тулбара весьма бы пригодился. Проброс в форму через АктивныйКонтекст работает нормально.
Сервис.АктивныйКонтекст(Конт);
Список=СоздатьОбъект("СписокЗначений");
Список.ДобавитьЗначение(wParam);
Если Сервис.ВыполнитьПроцедуру(Конт,"ПриПолученииКоманды",Список)=1 Тогда
СтатусВозврата(0);
КонецЕсли;
Откуда пришла команда в месте перехвата уже неизвестно.
Цитата: Djelf от 27 марта 2024, 13:52Цитата: АЛьФ от 27 марта 2024, 09:49Если открыта форма тестового или табличного документа, то команды не приходят в перехват.
Да, есть такое. Остальное вроде как починилось, F1 не двоится, хотя он у меня тоже заблокирован.
Еще бы во внешней форме кнопки как у справочника/документа вытащить и было бы совсем хорошо.
Если команда блокируется, то она и не будет двоиться, т.к. обработка прерывается.
Цитата: АЛьФ от 27 марта 2024, 14:12Откуда пришла команда в месте перехвата уже неизвестно.
Печально, но и не критично Сервис.ВыполнитьПроцедуру же не ругается если процедуры нет.
Напрашивается класс 1с++ по обобщенной обработке...
Интересно, "Открыть настроку" и "Сохранить настройку" если окно сообщений очищено и если там что-то уже есть посылают разные сообщения.
Окно сообщений очищено
ПриПолученииКомандыГлавнымОкном(32887,0) Вызываем повторно, добавляется не одно сообщение, а два
ПриПолученииКомандыГлавнымОкном(32887,0) ПриПолученииКомандыГлавнымОкном(32887,0) ПриПолученииКомандыГлавнымОкном(57670,0)
57670 - это как раз отработка F1 из-за наличия на форме сохранения кнопки "Помощь". Вечером отсеку этот вызов.
А вот задваивание на команды сохранения настройки у себя я не отловил. Вне зависимости от открытия окна сообщений.
Да, 57670 вылазит везде где только можно и по нескольку раз. На Вин7 F1 отрабатывает нормально, прилетает один раз 57670 и открывается справка. Остальное вроде не двоит.
А может есть у кого уже список по этим кодам? Что там кого, дабы самому не собирать.
Доработал перехват команд.
Обновил тестовую сборку.
При активном текстовом документе или окне сообщений так и не получается отловить команды. Буду еще искать что мешает.
Второй параметр в процедуре ПриПолученииКомандыГлавнымОкном сейчас показывает место сработавшего перехвата. Но потом будет равен 0, как и написано в документации.
В принципе, сейчас все работает, глюков особо не заметил...
Но, правда глубоко не копал.
Просто понял, что в моей задаче это мало чем поможет...
Еще групповое удаление/снятие пометки удаления, можно сделать, а с переносом в другую группу - облом...
Эта процедура отрабатывает, и что-бы подавить стандартную, ПриПереносеЭлементаВДругуюГруппу(Эл, ЦелГр), приходится ставить ФСО в 0. А если не отрабатывает ПриПереносеЭлементаВДругуюГруппу(Эл, ЦелГр), то куда мы хотим перенести - не понятно, без этой процедуры нет ЦелГр(Целевой группы)... Как ее еще определить, не понятно...
В общем, интересно, может для чего-то и пригодится, но не для этой задачи :-(
Цитата: MWW_Ruza от 28 марта 2024, 00:43В принципе, сейчас все работает, глюков особо не заметил...
Но, правда глубоко не копал.
Просто понял, что в моей задаче это мало чем поможет...
Еще групповое удаление/снятие пометки удаления, можно сделать, а с переносом в другую группу - облом...
Эта процедура отрабатывает, и что-бы подавить стандартную, ПриПереносеЭлементаВДругуюГруппу(Эл, ЦелГр), приходится ставить ФСО в 0. А если не отрабатывает ПриПереносеЭлементаВДругуюГруппу(Эл, ЦелГр), то куда мы хотим перенести - не понятно, без этой процедуры нет ЦелГр(Целевой группы)... Как ее еще определить, не понятно...
В общем, интересно, может для чего-то и пригодится, но не для этой задачи :-(
Так я же специально сделал, чтобы для дерева групп объект АтрибутФормы возвращал текущую группу.
А... Это уже работает? Упустил. Попробую.
Цитата: АЛьФ от 27 марта 2024, 21:48При активном текстовом документе или окне сообщений так и не получается отловить команды.
АЛьФ, а можно АктивныйКонтекст научить понимать текстовый документ по аналогии с табличным документом?
В последнем случае, в отличие от обычных форм, АктивныйКонтекст возвращает объект Таблица, и это просто супер штука, напр. для конвертации таблиц одним кликом.
Может ли в принципе АктивныйКонтекст возвратить объект Текст?
Цитата: item от 28 марта 2024, 09:19Цитата: АЛьФ от 27 марта 2024, 21:48При активном текстовом документе или окне сообщений так и не получается отловить команды.
АЛьФ, а можно АктивныйКонтекст научить понимать текстовый документ по аналогии с табличным документом?
В последнем случае, в отличие от обычных форм, АктивныйКонтекст возвращает объект Таблица, и это просто супер штука, напр. для конвертации таблиц одним кликом.
Может ли в принципе АктивныйКонтекст возвратить объект Текст?
В принципе может.
Цитата: АЛьФ от 28 марта 2024, 09:21Цитата: item от 28 марта 2024, 09:19АЛьФ, а можно АктивныйКонтекст научить понимать текстовый документ по аналогии с табличным документом?
В принципе может.
Вдогонку, есть такой недостаток в объекте Таблица, после перехвата ее АктивнымКонтекстом нет никакой возможности получить ни Заголовок ни ИмяФайла, с которыми она была выведена.
Мог бы Сервис получить эту информацию?
Цитата: item от 28 марта 2024, 09:38Цитата: АЛьФ от 28 марта 2024, 09:21Цитата: item от 28 марта 2024, 09:19АЛьФ, а можно АктивныйКонтекст научить понимать текстовый документ по аналогии с табличным документом?
В принципе может.
Вдогонку, есть такой недостаток в объекте Таблица, после перехвата ее АктивнымКонтекстом нет никакой возможности получить ни Заголовок ни ИмяФайла, с которыми она была выведена.
Мог бы Сервис получить эту информацию?
Посмотрю.
Цитата: item от 28 марта 2024, 09:19, напр. для конвертации таблиц одним кликом.
ну так у меня на нем отправка пакетов печатных форм была сделана, открыли торг12, счф, счет, да что угодно - жмак! готово письмо для отправки клиенту. Даже напродавал через ИС малость
Цитата: Злоп от 28 марта 2024, 14:49ну так у меня на нем отправка пакетов печатных форм была сделана
Вот, а в тексте можно и письмецо другу настрочить.)
Текст вообще какой-то обделённый персонаж в платформе.
Мог бы жить, а вместо него приходится крутить Sci-Lexer-Colorer-ы.
Банально негде даже юзеру шаблоны приказов редактировать, многострочное поле та еще гадость.
Посмотрел у себя (последняя сборка) - окно с текстом вообще не отлавливается.
Сервис.АктивныйКонтекст() при активном окне "Текст" - возвращает 0
Цитата: АЛьФ от 28 марта 2024, 10:14после перехвата ее АктивнымКонтекстом нет никакой возможности получить ни Заголовок ни
Сервис.СписокТаблиц().Выгрузить(ТутСпискЗначений);
или
ТутСпискЗначений = Сервис.СписокВсехОткрытыхОкон();
Таблица (активное окно таблицы) - в СЗ будет первым.
Представление в СЗ - заголовок окна, там будет имя файла если открыто из файла
Цитата: Злоп от 28 марта 2024, 18:27Сервис.СписокТаблиц().Выгрузить(ТутСпискЗначений);
или
ТутСпискЗначений = Сервис.СписокВсехОткрытыхОкон();
Ну, голова, это ж то что надо.
То, что доктор прописал. )
Спасибо, Доктор Злоп!
И АЛьФу поклон (https://forum.dorex.pro/index.php?msg=920)
Заведу ка я ветку вдогонку, а то уже наследили в гостях. )
А по теме, проясните мне, люди добрые, что не так с в/к RWidjets, есть АЛьФ реализует подобный функционал в Формексе.
Цитата: item от 29 марта 2024, 10:37А по теме, проясните мне, люди добрые, что не так с в/к RWidjets, есть АЛьФ реализует подобный функционал в Формексе.
В последней версии RWidjets не работают сообщения от панели, в предыдущей работают, но все равно это +еще одна ВК.
Цитата: Djelf от 29 марта 2024, 10:56В последней версии RWidjets не работают сообщения от панели, в предыдущей работают, но все равно это +еще одна ВК.
Ясно, спасибо, не знал таких нюансов.
Была еще в/к интересная, FormPanel от Chieftain, не знаете, в каком она состоянии?
Цитата: Djelf от 29 марта 2024, 10:56В последней версии RWidjets не работают сообщения от панели, в предыдущей работают, но все равно это +еще одна ВК.
RWidjets не использовал.
Метаданные md весьма тривиальны.
Использую их non problem с WIN API формировать весь диалоговый функционал 1С 7.7 (меню, toolbar, диалоговые окна, ...).
Теперь formex умеет toolbar динамически создавать?
Цитата: Forum123 от 29 марта 2024, 12:44Теперь formex умеет toolbar динамически создавать?
Не умеет.
Цитата: АЛьФ от 29 марта 2024, 13:04Цитата: Forum123 от 29 марта 2024, 12:44Теперь formex умеет toolbar динамически создавать?
Не умеет.
Умеет, но тщательно скрывает.
Посмотрите на ПланировщикРесурсов.
Там тулбар на форме, и плавающее окно дочернее.
АЛьФ, а почему на форуме нет раздела для обсуждения этого проекта?
Цитата: item от 29 марта 2024, 13:10а почему на форуме нет раздела для обсуждения этого проекта?
- неуловимый Джо?
Цитата: Злоп от 29 марта 2024, 13:20- неуловимый Джо?
Не знаю, может наоборот, терра инкогнита.
КЗК в обсуждении есть, ConfigSpy и Inserter уже в составе формекс.
Остался Планировщик.
Цитата: item от 29 марта 2024, 13:10Цитата: АЛьФ от 29 марта 2024, 13:04Цитата: Forum123 от 29 марта 2024, 12:44Теперь formex умеет toolbar динамически создавать?
Не умеет.
Умеет, но тщательно скрывает.
Посмотрите на ПланировщикРесурсов.
Там тулбар на форме, и плавающее окно дочернее.
Так это собственное окно, полностью заменяющее отрисовку формы. Так можно что угодно лепить. Только вот каждое такое окно надо кодом в dll прописывать.
Цитата: item от 29 марта 2024, 13:10АЛьФ, а почему на форуме нет раздела для обсуждения этого проекта?
Проект в массы не пошел.
Цитата: АЛьФ от 29 марта 2024, 13:30Проект в массы не пошел.
Может, пора отпустить его в люди, это проект?
Думал про него, когда работал с одним мед.центром, там в битриксе рецепция работала, прием пациентов,
расписание дня, график приема и прочее. Ток я так и не понял, смогу ли прикрутить, и в общем не настоял.
Вроде все коды тулбаров собрал...
КомандыТулбара = СоздатьОбъект("АссоциативныйВектор");
КомандыТулбара.Добавить(32786,"НоваяСтрока");
КомандыТулбара.Добавить(32891,"НоваяГруппа");
КомандыТулбара.Добавить(32784,"Изменить");
КомандыТулбара.Добавить(32862,"Просмотр");
КомандыТулбара.Добавить(32790,"КопироватьСтроку");
КомандыТулбара.Добавить(32785,"ПометитьНаУдаление");
КомандыТулбара.Добавить(32788,"Записать");
КомандыТулбара.Добавить(32895,"ОтборПоЗначению");
КомандыТулбара.Добавить(32927,"БыстрыйОтборПоЗначению");
КомандыТулбара.Добавить(32921,"ИсторияОтбора");
КомандыТулбара.Добавить(32920,"ОтключитьОтбор");
КомандыТулбара.Добавить(32787,"Выбрать");
КомандыТулбара.Добавить(32886,"История");
КомандыТулбара.Добавить(32889,"НайтиВДереве");
КомандыТулбара.Добавить(32890,"ПеренестиВГруппу");
КомандыТулбара.Добавить(32866,"ИзменитьРежимВыводаГрупп");
КомандыТулбара.Добавить(32896,"ОткрытьПодчиненныйСправочник");
КомандыТулбара.Добавить(32873,"Описание");
КомандыТулбара.Добавить(57669,"РассказатьПро");
КомандыТулбара.Добавить(32877,"ВвестиНаОсновании");
КомандыТулбара.Добавить(32881,"ИнтервалЖурнала");
КомандыТулбара.Добавить(32879,"НайтиПоНомеру");
КомандыТулбара.Добавить(32912,"ОткрытьОперацию");
КомандыТулбара.Добавить(32918,"Проводки");
КомандыТулбара.Добавить(33777,"ПерейтиВЖурналОпераций");
КомандыТулбара.Добавить(32914,"ПерейтиВЖурналПроводок");
https://docs.google.com/spreadsheets/d/12c0V2PYnTUpk5f8eDMGtgHD8FPUebO9z9pIndzuUHhc/edit?usp=sharing
Можно дополнять.
Цитата: item от 29 марта 2024, 13:51Цитата: АЛьФ от 29 марта 2024, 13:30Проект в массы не пошел.
Может, пора отпустить его в люди, это проект?
Думал про него, когда работал с одним мед.центром, там в битриксе рецепция работала, прием пациентов,
расписание дня, график приема и прочее. Ток я так и не понял, смогу ли прикрутить, и в общем не настоял.
Если он тебе нужен, напиши мне на alf@dorex.pro, вышлю дистрибутив.
Цитата: item от 29 марта 2024, 13:28ConfigSpy и Inserter уже в составе формекс.
- это как?
Цитата: Злоп от 30 марта 2024, 01:45Цитата: item от 29 марта 2024, 13:28ConfigSpy и Inserter уже в составе формекс.
- это как?
Ну, Inserter потерял актуальность можно сказать намедни, с перенаправлением локальных событий в глобальные процедуры,
а с ConfigSpy я верно погорячился, ПерехватСистемныхСообщений затесался в ассоциативный ряд.