Страница 1 из 2
Доп. пункт в меню
Добавлено: 05 ноя 2015, 15:36
beatlov
Всем Добрый день!
У меня проблема с добавлением нового пункта в выпадающем меню((( ( ПК "Галактика" 9)
Модуль "Спецодежда" > Настройка->Нормы выдачи спецодежды ->Форма "Редактирование нормы выдачи специальной (фирменной) одежды".
Необходимо добавить новый пункт меню в выпадающем меню части экрана "Начало - Окончание"
Опытным путем узнал наименование меню - "F_SFO::SFO_NormEdit_HotKeys". Наимнование окна: WinEditNormSFO
Все делал по примерам... Что получилось - данный пункт не появился в главном выпадающем меню, НО выборе пункта "Печать" -печать не осуществляется, а выпадает как раз нужное меню. Не совсем понятно, что такое
Код такой:
const
cmDoDataMTO = 990099;
cmtest1 = 990102;
End;
#component 'F_SFO'
alter interface EDITNORMSFO;
overload end;
var l_menuID,l_menuID2:longint ;
ln_nrec:comp;
window WinEditNormSFO;
HandleEvent
cmHotKeys:
{
inherited::handleEvent(cmHotKeys);
l_menuID := LoadMenu('F_SFO::SFO_NormEdit_HotKeys');
AddMenuItemEx2(l_menuID,'***.Генерация норм для спецодежды' , '' ,'',cmDoDataMTO, 0,'');
PutHotCommand(RunLoadMenu(l_menuID));
}
cmDoDataMTO:
IF RunInterface('SPECODSMN::SpecOd_001', NORMSFO.NREC)<>cmDefault
{
}
end;
end;
end.
Re: Доп. пункт в меню
Добавлено: 05 ноя 2015, 17:48
Den
как min не хватает StoreMenuHowDynamics
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 11:46
beatlov
Спасибо за ответ. Но StoreMenuHowDynamics - функция для динамического меню.
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 12:22
edward_K
1. inherited::handleEvent(cmHotKeys); имхо лишнее.
2. Getifccurrentfieldname плиз.
3. LogStrTofile или message Вам в помощь. Наиболее вероятное, что вы не попадаете в нужное место обработчика, ну или что еще бывает - так что рес ваш перекрыт еще чем то - проверьте через сервис - утилиты - запуск интерфейса , что запуск идет именно из вашего ресурса. С виду то все нормально.
MenuID := LoadMenu(ww_Str);
AddMenuItemEx(MenuID,'????????????????????????????','',cmAlt9,kbAlt9)
PutHotCommnad( RunLoadMenu(MenuID))
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 12:23
Den
Код: Выделить всё
DeleteMenuHowDynamics('F_SFO::SFO_NormEdit_HotKeys1')
l_menuID := LoadMenu('F_SFO::SFO_NormEdit_HotKeys1');
AddMenuItemEx2(l_menuID,'***.Генерация норм для спецодежды' , '' ,'',cmDoDataMTO, 0,'');
if StoreMenuHowDynamics(l_menuID,'F_SFO::SFO_NormEdit_HotKeys1'){}
inherited::handleEvent(cmHotKeys);
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 12:35
edward_K
if StoreMenuHowDynamics(l_menuID,'F_SFO::SFO_NormEdit_HotKeys1'){}
Ну это тоже вариант - только журнал посмотрите - зачем лишние действия?
Вы ж по факту переписываете меню в x$resource каждый раз.
Тогда уж сделайте в момент проверки настроек.
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 15:29
beatlov
Спасибо за ответы! Решилось все без динамического меню. С динамическим меню - там все серьезно)))) в x$resource страшновато лезть))) просто убрал inherited)
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 15:32
edward_K
Принято писать как
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 16:29
Den
ну убирать inherited тоже фиг знает - это означает ведь забить болт на все будущие изменения какие, теоретически, могут внести в обработчик события данный прикладники.
Так что вопрос риторический что лучше - перекрыть все событие или меню динамическое сделать в данном конкретном случае.
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 16:39
edward_K
В очень редких случаях меню набивается из нескольких, блокируются какие то строчки и т.п.
В принципе перекрытие меню неплохая идея(я так добавляю меню в модуль) - но место не удачное - это надо сделать раз и забыть до следующей установки патчей.
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 17:56
beatlov
Все таки проблема.... пункт в меню добаляется... но при этом он заменяет один существующий пункт ...что делать?? все таки инхерит делать?
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 18:07
edward_K
getifccurrentfieldname
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 18:34
beatlov
Через эту функцию имя меню ж не узнать?
Вот результат.
'F_SFO::EDITNORMSFO.WINEDITNORMSFO.BRNORMDATESFO.NORMDATESFO.FRDATE'
При изучении F_SFO.chm - определил, что это F_SFO::SFO_NormEdit_HotKeys1
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 19:12
edward_K
Код: Выделить всё
cmHotKeys:
{
if (RecordExists VarZamDate where (( NormSFO.nRec == VarZamDate.cNormSFO and
NormDateSFO.FrDate == VarZamDate.frDate and
cgNormZamBord <<= VarZamDate.NewDate (NoIndex) )) <> tsOk)
PutHotCommand(RunMenu('SFO_NormEdit_HotKeys1'));
else
PutHotCommand(RunDynMenu('F_SFO::SFO_NormEdit_HotKeys1' + ';' + 'SEPARATOR' + ';' + 'F_SFO::SFO_NormEdit_Zamen'));
}
то есть для 2 случая вам нужно добавить к вашему новому меню второе. Без исхов к сожалению вы это не узнаете. Метод DEN в этом случае универсальней, но не зачем каждый раз сохранять меню в cmHotKeys.
Re: Доп. пункт в меню
Добавлено: 06 ноя 2015, 20:09
beatlov
Спасибо!!! Все получилось!!! Вот код,может кому-нибудь понадобится.
cmHotKeys:
{
if (RecordExists VarZamDate where (( NormSFO.nRec == VarZamDate.cNormSFO and
NormDateSFO.FrDate == VarZamDate.frDate and
cgNormZamBord <<= VarZamDate.NewDate (NoIndex) )) <> tsOk)
{
PutHotCommand(RunDynMenu('F_SFO::SFO_NormEdit_HotKeys1' + ';SEPARATOR;'+'F_SFO::mnMTO_'));
}
else
{
PutHotCommand(RunDynMenu('F_SFO::SFO_NormEdit_HotKeys1' + ';SEPARATOR;' + 'F_SFO::SFO_NormEdit_Zamen'+';SEPARATOR;'+'F_SFO::mnMTO_'));
}
}
mnMTO_ Menu //меню для заголовков заявок
{
-----------;//разделитель //hcWindows
-'***.Генерация норм для спецодежды' ,cmDoDataMTO ,'***.Генерация норм для спецодежды' , ,'F7' ,,scMenuCtx;
-----------;
}