Сообщения от тулбаров теперь транслируются в ПриПолученииКомандыГлавнымОкном()

Автор MWW_Ruza, 24 марта 2024, 00:55

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

MWW_Ruza

Да, без этого- "Под твою задачу сейчас работаю над методом получения текущего значения из дерева папок."
похоже не решить эту задачу... Удалить(пометить) несколько элементов - нет проблем.
А вот перенести в другую группу, не получится... Целевую группу я определяю через "ПриПереносеЭлементаВДругуюГруппу(Эл, ЦелГр)", предопределенную в форме списка справочника... Но, тут, при применении процедуры ПриПолученииКомандыГлавнымОкном(вПарам, иПар, ФСО) она не отрабатывает, поэтому, непонятно куда переносить...

MWW_Ruza

И кроме того, изменилось поведение этой процедуры, она "типа зациклилась", просто при открытии отладчика, похоже начинает самопроизвольно перебирать все элементы открытого окна... В предыдущих версиях, такого небыло. Может не понятно объяснил, вот видео: https://cloud.mail.ru/public/pVGw/zPmUh6SUt
Раньше, я спокойно ставил в отладчике точку останова внутри процедуры, нажимал нужную мне кнопку, и получал числовое значение, ей соответствующее. Теперь, это сделать не получается, отладчик срабатывает сразу, как будто эта процедура выполняется непрерывно, "сама по себе", без моих действий...

MWW_Ruza

Вот, еще видео, то-же самое, но менее "сумбурное", более продуманное и понятное: https://cloud.mail.ru/public/thfn/t5UJQpkUH

АЛьФ

Раньше не все командные сообщения попадали в предопределенную процедуру. Сейчас туда идет все. Отсюда и эти сложности в отладке.
Это и нагрузку лишнюю создает, поэтому вечером буду дорабатывать. Сделаю, чтобы если в процедуре ПриПолученииКомандыГлавнымОкном флаг стандартной обработки установлен в -1, то команда больше не перехватывается. Это снизит нагрузку и позволит перехватывать только нужные команды.

АЛьФ

Цитата: АЛьФ от 25 марта 2024, 09:09Раньше не все командные сообщения попадали в предопределенную процедуру. Сейчас туда идет все. Отсюда и эти сложности в отладке.
Это и нагрузку лишнюю создает, поэтому вечером буду дорабатывать. Сделаю, чтобы если в процедуре ПриПолученииКомандыГлавнымОкном флаг стандартной обработки установлен в -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, это как-то более понятно, чем ранее описанное

Arbuz

Что-то у меня теперь ПриПолученииКомандыГлавнымОкном() совсем стало непонятно работать. Например при только открытии меню Операции последовательно прилетают все коды из подпунктов этого меню. И как теперь отличать нажатие на меню Операции от нажатия пункта Константы из него?

Также при запуске открывается ИнфоБлок и пока его не закроешь всё время летят, в том числе, коды 32848 и 32849 - а это калькулятор и календарь из меню Сервис.

ЗЫ: Это происходит только если открыто любая форма или таблица. Если дочерних окон нет, то всё работает как надо.

Arbuz

Ещё стало задваивать команды, например в журнале документов Изменить время документа стало отрабатывать дважды, раньше было однократно.

ЗЫ: в версии от 17.03.24 срабатывает однократно.

Также задваивает, например, закрытие "крестиком" формы документа код 61536.

АЛьФ

Что-то совсем сломалось в отлове команд. Почему-то сыпятся команды, которые идут на проверку доступности. Но не все и не всегда. Пытаюсь разобраться....

АЛьФ

Основную массу постоянно идущих команд я отсеил.
Но с двойной обработкой проблема остается.
Может кто что подскажет?

У меня сейчас стоит перехват MainWndProc главного окна. Этот перехват стоял на команды изначально (отсюда и название процедуры ПриПолученииКомандыГлавнымОкном), туда не попадаю команды с тулбаров и модальных окон(очевидно).
Теперь был добавлен перехват CTabFrame::OnCmdMsg() и CGetDlg::OnCmdMsg().
Теперь получается, что команды из контекстного меню не модального окна попадают в оба перехвата и, соответственно, для них получается два вызова предопределенной процедуры. Это не создает проблем, если стандартная обработка отменяется, в перехвате MainWndProc прерывается обработка сообщения и до OnCmdMsg оно уже не доходит. Но вот если требуется что-то выполнить по команде и пустить дальше, то... Проблема...

АЛьФ

Мда... В очередной раз убеждаюсь, что проговаривание проблемы помогает в ее решении.
Убрал обработку сообщения WM_COMMAND из перехвата MainWndProc и добавил перехват OnCmdMsg() главного окна. Ушла еще часть двойных вызовов. Но все равно остаются какие-то двойные вызовы. Боюсь, что с этими придется как-то мириться.

Обновил тестовую сборку, прошу глянуть.