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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

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

Сообщение Ренат »

Доброго времени суток.

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

Заранее спасибо.
sensoft
Постоянный гость
Сообщения: 67
Зарегистрирован: 15 апр 2008, 16:48
Откуда: Череповец

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

Сообщение sensoft »

масса занятного в файле:
G:\GAL81\exe\GALDOC\!GSDK.chm
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

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

Сообщение Ренат »

Наверное лыжи не катят :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'Счет'
Ничего тут про локальное меню не сказано.
Я наверное не там смотрю?
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

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

Сообщение Ренат »

Кажется мозг включился. Нашел в этом файле список меню. Но не пойму как найти то меню которое открывается на вкладке "Прочее" в окне редактирования организации
Там два пункта "Внешняя классификация" и "Внешние атрибуты"
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

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

Сообщение Ренат »

Ну подскажите кто нибудь! :?
Я уже все написал. А прикрутить куда надо не могу :x
Надо именно в локальное меню на вкладке "Прочие" в карточке контрагента.
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение KATZ »

Это из L_KATORG.CHM:

Изображение
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

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

Сообщение Ренат »

Да. Это видел. Но как сделать чтобы оно появлялось именно на этой вкладке?
У меня вот есть такой кусок кода.

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

#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.

Я так полагаю нужно еще проверять что активной является именно эта вкладка? Если да, подскажите пожалуйста как это сделать.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

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

Сообщение 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);
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

возможно вам поможет
function GetCurrentFormat : longInt;
case GetCurrentFormat of
scr001 : {

}
else
{ inherited :: HandleEvent (cmHotKey);

}
end;
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение 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 вообще изменять не надо.
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

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

Сообщение Ренат »

Попробовал так

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

#Component "L_KATORG"

alter interface KATORG;
var menuID:longint;

HandleEvent
cmHotKeys:
{
	message(string(GetCurrentFormat));
};
end;
end.
Событие обрабатывается только в главном окне интерфейса, а в карточке редактирования не срабатывает. Может надо делать "Alter Interface" после чего то другого?
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

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

Сообщение Ренат »

Vik - Меню появлилось именно там где нужно, но не теперь не вызывется мой интерфейс!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

у окна свои события, а на табличные следует использовать tableevent.
и cmValue1 обработку (а лучше где нибудь 40 и выше) забыли прописать.
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

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

Сообщение Ренат »

Нет. Обработку описал. Вот полный код.

#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.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

значится все таки нужно перехватывать cmHotkey. Местами прописано RunCommand(RunMenu), а местами стоит case RunMenu of
Ответить