управление пунктами главного меню 1с #21503


#0 by pyramid
Друзья, подскажите, как правильно управлять видимостью и доступностью пунктов главного меню 1с?Некоторым сотрудникам необходимо запретить изменять рабочую дату. Для этого я удаляю пункт меню Сервис-Параметры при помощи метода DeleteMenu, вызываемого из внешней компоненты. Однако, когда появляются или исчезают пункты меню, к примеру, пункт "Действия" при создании текстового документа, удалённый пункт появляется.И почему-то не получается делать пункты подменю серыми (MF_GRAYED), только удалять. Пункты меню, на первом уровне, делать серыми получается.
#1 by MetaEditor
да потомучто меню каждый раз перестраивается... надо ловит системное сообщение какоенибудь, например WM_INIT и туда уже этот код...
#2 by MetaEditor
+1)т.е WM_INITMENU
#3 by pyramid
А в подменю сделать серыми пункты тоже не получается из-за перестраивания меню?
#4 by MetaEditor
скорее всего да...MF_BYPOSITION замени на MF_BYCOMMAND ...а идентификаторы посмотри в ресурсах 1crcrus.dll
#5 by pyramid
замена MF_BYPOSITION на MF_BYCOMMAND не помогла - пункты в подменю не изменяют видимость.Как ловить сообщения во внешней компоненте?
#6 by orefkov
Чтобы реализовать это, надо очень глубоко разбираться вструктуре MFC, и сделать получиться только из VC++ & MFC
#8 by Златик
А я бы сделал проще и без всяких внешних компонент.При начале работы системы запомнил бы в переменную системную дату, проверил бы ее значение из некоторого секретного места, и кроме того- с наличием определенных документов после этой даты (чтобы не вводили задним числом).В процедуре ВводНового, а также ПриОткрытии всех документов вызвал бы глобальную процедуру, которая бы принудительно устанавливала бы рабочую дату, если ИмяПользователя принадлежит опредлеленному списку.Догадываюсь, что все эти манипуляции- только для запрета правки доков задним числом. Так для этого управление рабочей датой не нужно вовсе.Достаточно подправить проверку разрешения редактирования, включив в нее не только проверку даты константы, но и наличие доков (обычно-расходных накладных) введенных после рабочей даты.
#9 by orefkov
Покажешь пример, сниму шляпу в восхищении.
#10 by MMF
только что подрихтовал, чтобы делать серым пункт подменю.
#11 by pyramid
михаил, про какие камни идёт речь в ?
#12 by artbear
Полгода, год назад ты уже показывал этот файл? или ты что-нибудь менял в этом файле или его содержимое осталось прежним?
#13 by MMF
ничего не менял. Ну вот только что пару строчек исправил для того, чтобы элементом подменю управлять. Я как и тогда, считаю, что для доведения до нормального состояния (хотя бы вполовину АЛьФовой компоненты) надо довольно долго колупаться.
#14 by artbear
Что за компонента от АЛьФ-а? Вроде бы в Форм-Екс такого нету.Второй раз слышу о какой-то компоненте АЛьФ-а, но нигде ссылок нету, даже у него на сайте
#15 by pyramid
Михаил, мой ящик pyramidd$ok*kz.О каких проблемах Вы говорили?
#16 by pyramid
я - тупой.делаю так:    methOn: begin      if FOldWndProc = nil then beginописание оконной процедуры:begin  if Handle = FMain1CWnd then begin    case MSG ofend;После назначения нового обработчика оконной процедуры прекращается отрисовка окна 1с, несмотря на вызов старого обработчика в конце. Так происходит, даже если из нового обработчика вызывать только старый. Что не так?
#17 by MMF
FOldWndProc - где и как объявлен?
#18 by pyramid
внутри класса TMenu1C:...пробовал и тушкой, и чучелом...
#19 by MMF
а надо было после implementation - глобальной переменной модуля. сам подумай почему
#20 by pyramid
не помогает...100% загрузка, всё время вызов нового обработчика.кстати, почему надо в implementation ?
#21 by MMF
а старое объявление в удалил?
#22 by pyramid
разобрался.Скажите, Михаил, а без таймера можно обойтись?Сейчас делается: получили сообщение WM_INITMENU, установили таймер, и через мгновение по срабатыванию таймера устанавливаем видимость, так?
#23 by MMF
1) можно, 2) сейчас не так :-)
#24 by pyramid
а как?
#25 by Torin
Компанента есть!, но она коммерческая! была выполнена на заказ!Возможности компаненты управлять меню убирать меню! Управлять формами! Управлять стлем окна , размером и так далее! В компаненту так же заложен еще и весть функционал ФормЕкс ! так что вот! это не пиар!Ты спросил я ответил!
#26 by MMF
ищите и обрящете
#27 by pyramid
Спасибо, Михаил!Вы сдвинули меня с мёртвой точки.
#28 by MMF
Ты что, прапорщик? Я вот прочитал твой и пост и как вживую: стоим мы на плацу, а перед нами подполковник Кочнев: "Товарищи курсанты! Я обращаюсь к вам! Принято решение! Отправить вас!...." и т.д. У него в голове, в буфере речевого вывода помещалось максимум 50 символов.
#29 by Torin
У меня "точка" не работает!
#30 by Torin
Варенье налилось иногда сама срабатывает :0)
#34 by orefkov
Вариант хитрый, но..."Низкий класс, не чистая работа." (с) О.БендерВо-первых, такой вариант практически ничем не отличается простоот удаления пункта меню. Ты меняешь id команды на 0xFFFFFFFF.Во-вторых, пропадает пиктограмма пункта меню, сам онсдвигается чуть влево по сравнению с остальными пунктами,и становится уже по высоте. (те отключается ownerdraw)В-третьих, при наведении на него мышки читаем в строкесостояния "Активизировать окно"
#35 by orefkov
Уж если делать, то надо так:ловить WM_INITMENUPOPUP, вызывать старую оконную процедуру,а ПОСЛЕ сделатьEnableMenuItem(MenuHandle,32803,MF_BYCOMMAND|MF_GRAYED);
#38 by orefkov
Ну почему же, снимаю :)Действительно, возможно. Это я ступил.
#40 by artbear
:))
#41 by MMF
Олег, зацени "наш ответ Чимберлену"
#43 by MMF
Это потому что я не тот файл закачал :-( Щас обновлю
#44 by MMF
(43 + ) Вот гадство. Превысил лимит на webFile.ru
#46 by SnarkHunter
Просим, просим!..
#47 by MMF
а я больше не знаю файлообменников :-( вариант отличается от только    Case MSG of      WM_INITMENUPOPUP,WM_INITMENU: (тут я прибил в процессе отладки WM_INITMENU)
#48 by MMF
>таки закачал
#49 by pyramid
продолжим?спасибо Олегу Садовникову и MMF за идеи.пример лежит на . исходники надо?чтобы задизаблить Сервис-Параметры, вызываем Меню.Затемнить('Сервис|Параметры'), точки и амперсанды игнорируются.нормально работает только в POPUP меню, в пунктах верхнего уровня не работает нормально.Вопрос таков: Сервис-Параметры из меню запретили. Как отловить нажатие кнопки Параметры из Панели инструментов?
#51 by pyramid
закинул---В продолжение темы:Уважаемые гуру, как поймать событие открытия формы "Настройка параметров системы", и запретить в нём элемент диалога ID: 4195 (edit для ввода рабочей даты)?
#53 by Данила хМастер
Мужики! А чего, нельзя просто delом из интерфейса "Сервис" убрать?У меня получилось 8~)
#54 by pyramid
у меня тоже получилось убрать delом "Сервис"!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С