Страница 1 из 6

Как узнать имя локального меню?

Добавлено: 21 сен 2010, 17:51
Ренат
Доброго времени суток.

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

Заранее спасибо.

Re: Как узнать имя локального меню?

Добавлено: 21 сен 2010, 18:09
sensoft
масса занятного в файле:
G:\GAL81\exe\GALDOC\!GSDK.chm

Re: Как узнать имя локального меню?

Добавлено: 21 сен 2010, 18:18
Ренат
Наверное лыжи не катят :cry:
вот что там нашел

Код: Выделить всё

Window L_KATORG::KatOrg.KatOrg
Главное окно интерфейса L_KATORG::KatOrg 

Структура видимых элементов
TreeBrowser trKatOrg
TreeColumn c_TRKATORG_KATORGIMP.CODE_Номер ^C'Номер'
TreeColumn c_TRKATORG_KATORGDESCR.NAME_Наименование_организации ^C'Наименование организации'
TreeColumn c_TRKATORG_KATORGIMP.NAME_Наименование_организации ^C'Наименование организации'
TreeColumn c_TRKATORG_KATORGDESCR.SHORTNAME_Альтернативное_наименование ^C'Альтернативное наименование'
TreeColumn c_TRKATORG_KATORGIMP.SHORTNAME_Альтернативное_наименование ^C'Альтернативное наименование'
TreeColumn c_TRKATORG_KATORGIMP.UNN_УНН/ИНН ^C'УНН/ИНН'
TreeColumn c_TRKATORG_ISBAL
TreeColumn c_TRKATORG_ISARHIV
TreeColumn c_TRKATORG_MARKERSTR

Browser GroupsBrowse
Column c_GROUPSBROWSE_DESCRIPTORGROUPNAME_Группа ^C'Группа'

Browser brNamBank
Column c_BRNAMBANK_KATBANK.NAME_Наименование_банка ^C'Наименование банка'
Column c_BRNAMBANK_KATBANK.MFO1_БИК_/_Код_МФО ^C'БИК / Код МФО'
Column c_BRNAMBANK_KATBANK.SCHET1_Счет ^C'Счет'
Ничего тут про локальное меню не сказано.
Я наверное не там смотрю?

Re: Как узнать имя локального меню?

Добавлено: 21 сен 2010, 18:21
Ренат
Кажется мозг включился. Нашел в этом файле список меню. Но не пойму как найти то меню которое открывается на вкладке "Прочее" в окне редактирования организации
Там два пункта "Внешняя классификация" и "Внешние атрибуты"

Re: Как узнать имя локального меню?

Добавлено: 22 сен 2010, 22:53
Ренат
Ну подскажите кто нибудь! :?
Я уже все написал. А прикрутить куда надо не могу :x
Надо именно в локальное меню на вкладке "Прочие" в карточке контрагента.

Re: Как узнать имя локального меню?

Добавлено: 23 сен 2010, 08:04
KATZ
Это из L_KATORG.CHM:

Изображение

Re: Как узнать имя локального меню?

Добавлено: 23 сен 2010, 10:35
Ренат
Да. Это видел. Но как сделать чтобы оно появлялось именно на этой вкладке?
У меня вот есть такой кусок кода.

Код: Выделить всё

#Component "L_KATORG"

alter interface KATORG;
var menuID:longint;

HandleEvent
cmHotKeys:
{
  menuId := LoadMenu('L_KATORG::mnuKatOrgEdit');
  AddMenuItem (menuID,'Сформировать адрес из внешенго Кладра',cmValue1);
  PutHotCommand(RunLoadMenu(menuID));
};
cmValue1:
{
  RunInterface('getaddr_kladr');
};
end;
end.

Я так полагаю нужно еще проверять что активной является именно эта вкладка? Если да, подскажите пожалуйста как это сделать.

Re: Как узнать имя локального меню?

Добавлено: 23 сен 2010, 11:41
m0p3e
Вроде оно

Код: Выделить всё

Метод CurFormatInArea    
Назначение
Возвращает идентификатор формата интерфейса, активного (т.е. видимого в настоящий момент) в области, заданной параметром ScreenBrowseTreeMemoId.
Описание
function CurFormatInArea (screenBrowseTreeMemoId : longInt
                         ) : longInt;
Параметры
screenBrowseTreeMemoId - идентификатор области переключаемых форматов интерфейса. Область задаётся идентификатором любого из переключаемых форматов, прописанных в данной области (screen, browse, tree или memo).
Возвращаемое значение
Возвращает идентификатор формата интерфейса.
Пример
screen scOne;
  show at (10, 10, 20, 20);
end;
browse brTwo;
  show at (10, 10, 20, 20);
end;
...
  SetFormat (brTwo);
...
  if CurFormatInArea(brTwo) = brTwo then
                       // можно CurFormatInArea(scOne)
    SetFormat (scOne);

Re: Как узнать имя локального меню?

Добавлено: 23 сен 2010, 11:43
edward_K
возможно вам поможет
function GetCurrentFormat : longInt;
case GetCurrentFormat of
scr001 : {

}
else
{ inherited :: HandleEvent (cmHotKey);

}
end;

Re: Как узнать имя локального меню?

Добавлено: 23 сен 2010, 14:00
Vik
Можно сделать так:

Код: Выделить всё

cmInit : 
{
 if (Inherited::HandleEvent(cmInit) != heOk)
  {
      Abort;
       Exit;
  } 
 var  m_MenuName : string;
 var  m_Menu : longint;
 m_MenuName  := 'L_KATORG::mnuKatOrgEdit'
  if (RecordExists  X$Resources where (( 3 ==  X$Resources.XR$Type and m_MenuName == X$Resources.XR$Name))
              != tsOk)
    {
      DeleteMenuHowDynamics (m_MenuName);
      m_Menu := LoadMenuEx (m_MenuName, true, false);
      AddMenuItem(m_Menu, 'Сформировать адрес из внешенго Кладра',cmValue1);
      StoreMenuHowDynamics (m_Menu, m_MenuName);
      DisposeLoadMenu (m_Menu);
      ReinitHeaderMenu;
   }
}
Тогда cmHotKeys вообще изменять не надо.

Re: Как узнать имя локального меню?

Добавлено: 23 сен 2010, 15:10
Ренат
Попробовал так

Код: Выделить всё

#Component "L_KATORG"

alter interface KATORG;
var menuID:longint;

HandleEvent
cmHotKeys:
{
	message(string(GetCurrentFormat));
};
end;
end.
Событие обрабатывается только в главном окне интерфейса, а в карточке редактирования не срабатывает. Может надо делать "Alter Interface" после чего то другого?

Re: Как узнать имя локального меню?

Добавлено: 23 сен 2010, 15:15
Ренат
Vik - Меню появлилось именно там где нужно, но не теперь не вызывется мой интерфейс!

Re: Как узнать имя локального меню?

Добавлено: 23 сен 2010, 15:18
edward_K
у окна свои события, а на табличные следует использовать tableevent.
и cmValue1 обработку (а лучше где нибудь 40 и выше) забыли прописать.

Re: Как узнать имя локального меню?

Добавлено: 23 сен 2010, 15:27
Ренат
Нет. Обработку описал. Вот полный код.

#Component "L_KATORG"
alter interface KATORG;

create view
var menuID:longint;
as select * from X$Resources(ReadOnly) ;


HandleEvent
cmInit :
{
if (Inherited::HandleEvent(cmInit) != heOk)
{
Abort;
Exit;
}
var m_MenuName : string;
var m_Menu : longint;
m_MenuName := 'L_KATORG::mnuKatOrgEdit'
if (RecordExists X$Resources where (( 3 == X$Resources.XR$Type and m_MenuName == X$Resources.XR$Name))
!= tsOk)
{
DeleteMenuHowDynamics (m_MenuName);
m_Menu := LoadMenuEx (m_MenuName, true, false);
AddMenuItem(m_Menu, 'Сформировать адрес из внешнего Кладра',cmValue41);
StoreMenuHowDynamics (m_Menu, m_MenuName);
DisposeLoadMenu (m_Menu);
ReinitHeaderMenu;
}
};//cmInit
cmValue41:
{
RunInterface('getaddr_kladr',Katorg.Nrec, Katorg.Name);
};
end;
end.

Re: Как узнать имя локального меню?

Добавлено: 23 сен 2010, 15:36
edward_K
значится все таки нужно перехватывать cmHotkey. Местами прописано RunCommand(RunMenu), а местами стоит case RunMenu of