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

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

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

Злоп

Цитата: АЛьФ от 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.

Forum123

Цитата: АЛьФ от 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.
О чем вы вообще?

Forum123

Цитата: АЛьФ от 27 марта 2024, 13:13О чем вы вообще?
О том, что с диалоговыми формами 1С можно работать вообще не зная как 1С устроена.
У меня имеется ActiveX, который имеет много функционала для работы с диалоговыми формами.

Альф пост к Вам как разработчику.
Вы конечно знаете как работает 1С с диалоговыми формами, но многий функционал "на коленке" можно разработать зная как устроены окна MFC.

Это никоим образом не критика Вас как разработчика.

Пиит


Forum123

Цитата: item от 27 марта 2024, 13:30Есть уже, Intelligent называется, позабыт позаброшен.
Ньюанс в том, что у меня разработано 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 называется, позабыт позаброшен.
Ньюанс в том, что у меня разработано API для работы с метаданными.
Это позволит разработать конфигуратор, который будет не хуже чем в 1С 8.x.
В основном то о чём сказал больше мне нужно для тестирования своего GUI.
Чем придумывать какие-то отладочные примеры лучше реализовать полезный tools.

Зря об это рассказал.


Может проще создать в разделе дружественных проектов свою ветку, где рассказать о своей разработке и дать ссылку, где можно скачать и подробно изучить?