Страница 1 из 2
Докомпиляция интерфейса
Добавлено: 01 июл 2011, 18:00
Masygreen
Итак вот и я залез в эту ...
Вообщем Сбыт-Акты на услуги надо добавить кнопку или контекстное меню ..
с меню вроде лучше т.к. не надо ни какого наследования и если форма поменяется то пофиг...
Не работает, собирается без ошибок, но не работает .. где накосячил ?
Код: Выделить всё
#component 'L_SOPRDOC'
const cmCreateTXO = 990099; End;
alter interface AKTUSL;
overload end;
var menuID_ni:longint;
HandleEvent
cmHotKeys:{
inherited::handleEvent(cmHotKeys);
menuId_ni := LoadMenu('mnuSoprUslKatSopr');
AddMenuItem(menuId_ni,'****Создать ДО с ТХО****',cmCreateTXO);
PutHotCommand(RunLoadMenu(menuId_ni));}
cmCreateTXO:{ message('hi');}end;end.
Коротко: загружаю меню стандратное, добавляю свой пункт .. перегружаю cmHotKeys...
Re: Докомпиляция интерфейса
Добавлено: 01 июл 2011, 18:14
galover
скорей всего нужно закомментить inherited::handleEvent(cmHotKeys);
и если не прокатит, то попробовать заменить PutHotCommand на PutCommand.
Re: Докомпиляция интерфейса
Добавлено: 01 июл 2011, 18:36
Masygreen
как оказалось в cmHotKeys:{ вообще не попадает программа
Re: Докомпиляция интерфейса
Добавлено: 01 июл 2011, 18:52
galover
так там же в окне вызывается меню, значит нужно
Код: Выделить всё
alter interface AktUsl;
window EditSopr;
handleEvent
cmHotKeys:{}
end;
end;
end.
Re: Докомпиляция интерфейса
Добавлено: 03 июл 2011, 17:47
spark
galover писал(а):так там же в окне вызывается меню, значит нужно
Код: Выделить всё
alter interface AktUsl;
window EditSopr;
handleEvent
cmHotKeys:{}
end;
end;
end.
У меня вот так получилось:
Код: Выделить всё
#component 'L_SOPRDOC'
const cmCreateTXO = 990099; End;
alter interface AKTUSL;
overload end;
var menuID_ni:longint;
window EditSopr;
HandleEvent
cmHotKeys:
{
//inherited::handleEvent(cmHotKeys);
menuId_ni := LoadMenu('mnuSoprUslKatSopr');
AddMenuItem(menuId_ni,'****Создать ДО с ТХО****',cmCreateTXO);
PutHotCommand(RunLoadMenu(menuId_ni));
}
cmCreateTXO:
{
message('hi');
}
end;
end;
end.
Re: Докомпиляция интерфейса
Добавлено: 04 июл 2011, 18:31
Masygreen
и правда помогло
спасибо!
Re: Докомпиляция интерфейса
Добавлено: 31 май 2012, 13:43
sildae
Подскажите пожалуйста, если нужно докомпилировать меню накладной на сбыт, то какие значения нужно поставить?
L_SOPRDOC изучила, разные варианты mnu... попробовала, но не получается и где взять = 990099 значение константы.
Re: Докомпиляция интерфейса
Добавлено: 15 авг 2012, 18:33
Ruslan_V
Подскажите, пожалуйста, никода еще не сталкивался с докомпиляцией. Хочется понять, что необходимо для ее выполнения, с чего начать. Задача заключается в следующем: необходимо для ДО на закупку при изменении статуса тестировать наличие МЦ из спецификации на складах предприятия и запрещать изменение статуса в каком-то случае. В vipprogr.chm прочитал, что можно перегружать и расширять обработчики событий. Я так понял, что для докомпиляции необходимо иметь исходный текст интерфейса ДО на закупку. Или я ошибаюсь? Галактика 7.12, SQL. Версия Atlantis 3.03.22.
Re: Докомпиляция интерфейса
Добавлено: 15 авг 2012, 19:38
Den
2 Ruslan_V
Раз Вы с докой знакомились, то внизу приписка есть
"Докомпиляция интерфейсов поддерживается начиная с Атлантиса 5.0." (
Re: Докомпиляция интерфейса
Добавлено: 16 авг 2012, 11:15
Ruslan_V
Да, не доглядел, глянул только на последнюю строку, где описано, что расширение потоков данных введено начиная с Атлантис 5.1.2x. Жаль (
Re: Докомпиляция интерфейса
Добавлено: 21 авг 2012, 15:59
Sheinina
Пришлось мне тут докомпилировать интерфейс - нужно было добавить дополнительный фильтр для отчета. Расширила обработчик события cmInit и вроде как все хорошо, но после того, как формируется отчет, на экране остается пустое поле интерфейса (как если в невизуальном интерфейсе в конце обработчика cmInit не поставить abort). Подскажите, пожалуйста, что делать, как победить эту заразу? Интерфейс L_SF::JOURNGETSETSF.
Вот код:
Код: Выделить всё
#component 'L_SF'
alter interface JOURNGETSETSF;
var crec, cnaz: comp;
create view lbs as select *
from synonym schfact schfact_1, basedoc, katnazna
where ((
crec == schfact_1.nrec
and schfact_1.cbasedoc == basedoc.nrec
and basedoc.cnazna == katnazna.nrec
))
;
overload
DataStream DTS;
end;
DataStream DTS
(
[Fil_naz] cnaz;
Table inherited::FRSETSCHFACT
(
[SetNaz] lbs.katnazna.nrec;
);
Table inherited::FRGETSCHFACT
(
[GetNaz] lbs.katnazna.nrec;
);
)
Handleevent table FRSETSCHFACT
cmOnProcess: {
crec:=FRSETSCHFACT.cschf;
if lbs.getfirst schfact_1 = tsOK then
if lbs.getfirst basedoc = tsOK then
if lbs.getfirst katnazna = tsOK then {}
}
end;
Handleevent table FRGETSCHFACT
cmOnProcess: {
crec:=FRGETSCHFACT.cschf;
if lbs.getfirst schfact_1 = tsOK then
if lbs.getfirst basedoc = tsOK then
if lbs.getfirst katnazna = tsOK then {}
}
end;
end; // DataStream
Handleevent
cmInit:{
RunInterface('L_Katnazna::GetNazna',cnaz);
inherited::Handleevent(cmInit);
}
end;
end.
Re: Докомпиляция интерфейса
Добавлено: 21 авг 2012, 16:41
edward_K
ну раз вы берете на себя обработку каких то функций дорабатывайте до конца.
В данном случае
Код: Выделить всё
if inherited::Handleevent(cmInit)=heAbort
{ abort
}
Re: Докомпиляция интерфейса
Добавлено: 21 авг 2012, 18:10
Sheinina
Спасибо
На самом деле сама должна была догадаться, получив в запросе на текущее имя поля
Код: Выделить всё
'L_SF::JOURNGETSETSF.WSETPERIOD.SCRFILTPER.PD1'
,
что прорисовка окна производится не обработчике cmInit интерфейса, а несколько глубже.
Re: Докомпиляция интерфейса
Добавлено: 18 фев 2013, 08:26
Алексей
докомпилирую интерфейс, рисую кнопку, вешаю событие. все хорошо.
появляется слабовидящий пользователь и устанавливает себе значение в конфиг windows.fontsize=12 и при запуске галактики все мои явно выставленные значения по X Y позиционированию автоматом не умножаются...
если делать изменения ЦРФом - это как то учитывается, а как быть с добавленными программно элементами интьерфейсов ?
кто как решает данную проблему?
Re: Докомпиляция интерфейса
Добавлено: 18 фев 2013, 09:42
edward_K
я инклюдои подключаю следующий файл
Код: Выделить всё
// нужен для определения коэфицента при изменении шрифта
var wkoef , wkoefx :double ;
var wfont :string ;
wkoef:=1 ;
wfont:=GetStringParameter('Windows','FontSize',0)
case wfont of
'9' : { wkoef:=1.05 ;wkoefx:=1.14 ;}
'10': { wkoef:=1.10 ;wkoefx:=1.25 ;}
'8' : { wkoef:=1.00 ;wkoefx:=1.00 ;}
else
{ wkoef:=double(wfont)+0.0
wkoef:=sqrt(wkoef/8.0) ;
wkoefx:=wkoef/8.0
}
end ;
// пока сделаем так
// wkoef:=1;
// wkoefx:=1;
если определите коэффициенты точнее поделитесь.
Но выяснилась еще проблема - если системный шрифт в винде стоит не стандартный (средний или крупный или процентом) то этого не хватает
Если найдете функцию как это определить, поделитесь.