Как узнать имя локального меню?
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Как узнать имя локального меню?
Есть еще отчеты пользователя, рабочие места и тд. Я, например, просто сделал несколько групп в отчетах пользователя и помещаю туда свои какие-то наработки, не трогая главное меню.
Re: Как узнать имя локального меню?
отчеты пользователя пока решили проблему. Спасибо
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Re: Как узнать имя локального меню?
Добрый день, я потихоньку изучаю галку и vip. Дошли руки до менюшек, я практически полностью разобрался и сделал меню по примеру Vik в картотеке сотрудников. Для меня остался только один непонятный момент.
Наша дополненная менюха клаладётся в X$Resources строкой, в мемо-поле которой она собственно и описана. Код, перед выполнением проверяет наличие нашей строки в X$Resources, и если её там нет - исполняется и добавляет её туды. Вот только до меня никак не доходит куда денется наша строка из X$Resources при обновлении компоненты разработчиком до новой версии? Как узнать, что менюха изменилась и пересоздать её?
Чтобы не искать по теме приведу для удобства тут код:
Я так понимаю, что лучше этот код действительно выполнять при обновлении реестра настроек. Был бы очень признателен за пример, как это реализовать:)
Наша дополненная менюха клаладётся в X$Resources строкой, в мемо-поле которой она собственно и описана. Код, перед выполнением проверяет наличие нашей строки в X$Resources, и если её там нет - исполняется и добавляет её туды. Вот только до меня никак не доходит куда денется наша строка из X$Resources при обновлении компоненты разработчиком до новой версии? Как узнать, что менюха изменилась и пересоздать её?
Чтобы не искать по теме приведу для удобства тут код:
Код: Выделить всё
#component "Z_STAFF"
alter interface RECEPTIONMAIN;
create view as select * from
X$Resources(ReadOnly)
;
handleevent
cmNeweraPrintFssDoc:
{
}
cmInit:
{
var newera_menuID : longint;
var newera_menuname : string;
newera_menuname:='Z_STAFF::Receptionmenu';
if(inherited::handleevent(cmInit)=tsOk){};
if (RecordExists X$Resources where (( 3 == X$Resources.XR$Type and 'MENU Z_STAFF::Receptionmenu' == X$Resources.XR$Name )) <> tsOK)
{
message('куку');
DeleteMenuHowDynamics(newera_menuname);
newera_menuID:=LoadMenuEx(newera_menuname, true, false);
AddMenuItem(newera_menuID, 'Печать заявления в страховую организацию', cmNeweraPrintFssDoc);
StoreMenuHowDynamics(newera_menuID, newera_menuname);
DisposeLoadMenu(newera_menuID);
ReinitHeaderMenu;
}
}
end;
end.
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Как узнать имя локального меню?
Ничто не мешает разработчику вообще удалить из кода то меню, которое вы используете, либо переименовать его по каким-то соображениям.
А вот возможный пример, который вы просили.
А вот возможный пример, который вы просили.
Код: Выделить всё
#include CreateTune.vih
// установка даты модификации реестра настроек
Handler with replace DateModifyTune_ChangeMenu on ExtensionPoint
epDateModifyTune (TS : ObjStartCreateTune)
Action
{
TS.SetLastDateModTune(Day(Cur_Date),Month(Cur_Date),Year(Cur_Date));
Result := true;
}
Handler with replace CreateTuneComponent_ChangeMenu on extensionPoint
epCreateTuneComponent (TR: ObjCreateTuneEx) [201]
Action
{
var myMenuChanger : MenuChanger ; // какой-то объект с методами по работе с меню
myMenuChanger.changeMenu(); // какие-то нужные вам действия с меню
}
Re: Как узнать имя локального меню?
Возникла необходимость не добавить, а скрыть некоторые пункты контекстного меню для большинства пользователей, оставив стандартное только особо избранным. n0where уже поднимал вопрос о раздельном доступе к меню. Как я понял, это невозможно, так как отредактированное меню хранится в БД, и потому одинаково для всех? Как лучше организовать доступ?
Re: Как узнать имя локального меню?
Докомпиляцией... а как ещё?
Функция SetMenuItemState устанавливает состояние элемента меню.
Описание
SetMenuItemState(menuID : longInt; itemName : string; itemCommand : integet; state : byte) : boolean
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Re: Как узнать имя локального меню?
Лучше я суппортом тогда отредактирую.n0where писал(а):а как ещё?
Re: Как узнать имя локального меню?
Я решал аналогичную задачу - обрезал контекстное меню просмотра/редактирования табелей, а то из табеля много куда попасть можно... Взял оригинальное меню, убрал лишние строки, скомпилировал под тем же именем в отдельный ресурсный файл с высоким приоритетом и в репозитарии задал права доступа к компоненту: табельщикам - можно, остальным - запрет.
Может, не лучшее решение, но работает. Про горячие клавиши 99% пользователей слыхом не слыхивали...
Может, не лучшее решение, но работает. Про горячие клавиши 99% пользователей слыхом не слыхивали...
Re: Как узнать имя локального меню?
Заинтересовало. RunDynMenu - Как эта функция собирает меню? А какие-нибудь специальные требования к указанным меню, или спецусловия применения есть?LaaLaa писал(а):Код: Выделить всё
PutHotCommand(RunMenu('mnuKatOrgEdit'));
заменили наКод: Выделить всё
PutHotCommand(RunDynMenu('C_COMMON::Print_HotKeys;SEPARATOR;C_COMMON::AttrClass_HotKeys'));
Хотелось бы попользоваться, но у меня не получается, указываю два меню - второе меню не находит.
Что это за зверь, и как его съесть? Может, у кого есть информация?
Re: Как узнать имя локального меню?
Пользовался немного функцией RunDynMenu при доработке стандартных меню, всплывающих по правому клику. В качестве параметра передаем ей строку, состоящую из наименований меню (можно и с указанием компонентной принадлежности) - стандартных или собственной разработки. Как я понимаю, она разбирает полученные меню (и разделители) по пунктам и добавляет их по одному.
Если у вас второе меню не находится, попробуйте "поиграть" с компонентной принадлежностью, может в этом причина.
Если у вас второе меню не находится, попробуйте "поиграть" с компонентной принадлежностью, может в этом причина.
Re: Как узнать имя локального меню?
Спасибо, я, собственно, с той же целью интересуюсь...Starry писал(а):Пользовался немного функцией RunDynMenu при доработке стандартных меню, всплывающих по правому клику. В качестве параметра передаем ей строку, состоящую из наименований меню (можно и с указанием компонентной принадлежности) - стандартных или собственной разработки. Как я понимаю, она разбирает полученные меню (и разделители) по пунктам и добавляет их по одному.
Если у вас второе меню не находится, попробуйте "поиграть" с компонентной принадлежностью, может в этом причина.
Собирала строку в варианте: меню фейса+Separator+свое меню - функция при вызове ругалась, что не найден разделитель (separator), но мое меню было; убрала разделитель - стала ругаться на мое меню. Эксперимента ради поставила вторым стандартное меню (атрибуты) - результат тот же - не находит.
Вот есть ощущение - чего-то вроде как не хватает, не пойму только чего, может инклуда какого. Или параметр - строка составного меню - нужно писать как-то иначе
Наименования меню, компонентов, наличие меню в ресурсах - проверено, дело не в этом, что-то есть еще.
Re: Как узнать имя локального меню?
Посыпаю голову пеплом!
Все мои проблемы были из-за пробелов после ";". Без пробелов все ОК - получилось отличное меню.
Все мои проблемы были из-за пробелов после ";". Без пробелов все ОК - получилось отличное меню.
-
- Сообщения: 8
- Зарегистрирован: 01 окт 2012, 15:28
- Откуда: Брест
- Контактная информация:
Re: Как узнать имя локального меню?
Полная информация об интерфейсах, меню, формах содержится в файле GAL810\exe\GALDOC\!GSDK.chm
При этом обратите внимение, что основное меню может содержать вложенные подменю.
Пример.
Клиент попросил привязать договор к организации и добавлять его в назначение платежа в собственном платежном поручении.
К организации я привязал внешний атрибут 'Договор'. В окне платежного поручения я перегрузил меню, добавив свою команду меню 'Добавить договор в назначение платежа'.
Код примера:
#component 'F_PLPOR'
const
cmRunPrim = 9011;
End;
alter interface PLPOR;
var menuID_ni:LongInt;
var sDog : String;
Create view v_dog
var n_rec:comp;
as Select
attrval.Vstring
from attrval, attrnam
where
((
word(1418) == attrval.wtable and
n_rec == katorg.nrec and
katorg.nrec== attrval.crec and
word(1418) == attrnam.wtable and
'Договор'== attrnam.name and
attrnam.nrec== attrval.cattrnam
));
window WIPLDOCEDIT;
HandleEvent
cmHotKeys:
{
//inherited::handleEvent(cmHotKeys);
menuId_ni := LoadMenu('F_PLPOR::PLPOR_HOTKEYSW');
AddMenuItem(menuId_ni,'separator',1);
AddMenuItem(menuId_ni,'Добавить договор в назначение платежа',cmRunPrim);
PutHotCommand(RunLoadMenu(menuId_ni));
ReinitHeaderMenu;
}
cmRunPrim:
{
if(plpor.CPOL<>0)
{
v_dog.n_rec:=plpor.CPOL;
v_dog.getfirst;
sDog:=v_dog.attrval.vstring;
//if(Length(plpor.namepl1)+Length(plpor.namepl2)+Length(plpor.namepl3)+Length(plpor.namepl4)=0)
if(Length(sDog)>0)
{
UPDATE CURRENT plpor SET namepl4:=plpor.namepl4+'Согласно договора '+sDog;
ReReadRecord (#plpor);
}
else Message('В данной организации не заполнен внешний атрибут "Договор"');
}
}
end;
end;
end.
При этом обратите внимение, что основное меню может содержать вложенные подменю.
Пример.
Клиент попросил привязать договор к организации и добавлять его в назначение платежа в собственном платежном поручении.
К организации я привязал внешний атрибут 'Договор'. В окне платежного поручения я перегрузил меню, добавив свою команду меню 'Добавить договор в назначение платежа'.
Код примера:
#component 'F_PLPOR'
const
cmRunPrim = 9011;
End;
alter interface PLPOR;
var menuID_ni:LongInt;
var sDog : String;
Create view v_dog
var n_rec:comp;
as Select
attrval.Vstring
from attrval, attrnam
where
((
word(1418) == attrval.wtable and
n_rec == katorg.nrec and
katorg.nrec== attrval.crec and
word(1418) == attrnam.wtable and
'Договор'== attrnam.name and
attrnam.nrec== attrval.cattrnam
));
window WIPLDOCEDIT;
HandleEvent
cmHotKeys:
{
//inherited::handleEvent(cmHotKeys);
menuId_ni := LoadMenu('F_PLPOR::PLPOR_HOTKEYSW');
AddMenuItem(menuId_ni,'separator',1);
AddMenuItem(menuId_ni,'Добавить договор в назначение платежа',cmRunPrim);
PutHotCommand(RunLoadMenu(menuId_ni));
ReinitHeaderMenu;
}
cmRunPrim:
{
if(plpor.CPOL<>0)
{
v_dog.n_rec:=plpor.CPOL;
v_dog.getfirst;
sDog:=v_dog.attrval.vstring;
//if(Length(plpor.namepl1)+Length(plpor.namepl2)+Length(plpor.namepl3)+Length(plpor.namepl4)=0)
if(Length(sDog)>0)
{
UPDATE CURRENT plpor SET namepl4:=plpor.namepl4+'Согласно договора '+sDog;
ReReadRecord (#plpor);
}
else Message('В данной организации не заполнен внешний атрибут "Договор"');
}
}
end;
end;
end.
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Как узнать имя локального меню?
Работает!Bandito_Gangsterito писал(а):...
Пример.
...
+1
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Как узнать имя локального меню?
прочитал тему, и всё же внятного ответа на вопрос из первого поста темы не нашел.
как, зная имя интерфейса найти список возможных локальных меню?
тему и документацию прочитал, в саппорте в описании интерфейсов смотрел.
в L_Remont.chm локальных меню очень много.
не имея исходников, я так понял никак не найти?
как, зная имя интерфейса найти список возможных локальных меню?
тему и документацию прочитал, в саппорте в описании интерфейсов смотрел.
в L_Remont.chm локальных меню очень много.
не имея исходников, я так понял никак не найти?