Докомпиляция интерфейса

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

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

Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Докомпиляция интерфейса

Сообщение 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...
Время ведет!
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Докомпиляция интерфейса

Сообщение galover »

скорей всего нужно закомментить inherited::handleEvent(cmHotKeys);
и если не прокатит, то попробовать заменить PutHotCommand на PutCommand.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Докомпиляция интерфейса

Сообщение Masygreen »

как оказалось в cmHotKeys:{ вообще не попадает программа
Время ведет!
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Докомпиляция интерфейса

Сообщение galover »

так там же в окне вызывается меню, значит нужно

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

alter interface AktUsl;
  window EditSopr;
    handleEvent
        cmHotKeys:{}
    end;
  end;
end.
spark
Местный житель
Сообщения: 478
Зарегистрирован: 19 окт 2005, 13:38
Контактная информация:

Re: Докомпиляция интерфейса

Сообщение 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.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Докомпиляция интерфейса

Сообщение Masygreen »

и правда помогло :) спасибо!
Время ведет!
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Re: Докомпиляция интерфейса

Сообщение sildae »

Подскажите пожалуйста, если нужно докомпилировать меню накладной на сбыт, то какие значения нужно поставить?
L_SOPRDOC изучила, разные варианты mnu... попробовала, но не получается и где взять = 990099 значение константы.
Ruslan_V
Посетитель
Сообщения: 45
Зарегистрирован: 01 июн 2009, 17:11

Re: Докомпиляция интерфейса

Сообщение Ruslan_V »

Подскажите, пожалуйста, никода еще не сталкивался с докомпиляцией. Хочется понять, что необходимо для ее выполнения, с чего начать. Задача заключается в следующем: необходимо для ДО на закупку при изменении статуса тестировать наличие МЦ из спецификации на складах предприятия и запрещать изменение статуса в каком-то случае. В vipprogr.chm прочитал, что можно перегружать и расширять обработчики событий. Я так понял, что для докомпиляции необходимо иметь исходный текст интерфейса ДО на закупку. Или я ошибаюсь? Галактика 7.12, SQL. Версия Atlantis 3.03.22.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Докомпиляция интерфейса

Сообщение Den »

2 Ruslan_V

Раз Вы с докой знакомились, то внизу приписка есть
"Докомпиляция интерфейсов поддерживается начиная с Атлантиса 5.0." (
Ruslan_V
Посетитель
Сообщения: 45
Зарегистрирован: 01 июн 2009, 17:11

Re: Докомпиляция интерфейса

Сообщение Ruslan_V »

Да, не доглядел, глянул только на последнюю строку, где описано, что расширение потоков данных введено начиная с Атлантис 5.1.2x. Жаль (
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Докомпиляция интерфейса

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

Re: Докомпиляция интерфейса

Сообщение edward_K »

ну раз вы берете на себя обработку каких то функций дорабатывайте до конца.
В данном случае

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

if inherited::Handleevent(cmInit)=heAbort
{ abort
}
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Докомпиляция интерфейса

Сообщение Sheinina »

Спасибо :)
На самом деле сама должна была догадаться, получив в запросе на текущее имя поля

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

'L_SF::JOURNGETSETSF.WSETPERIOD.SCRFILTPER.PD1'
,
что прорисовка окна производится не обработчике cmInit интерфейса, а несколько глубже.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Докомпиляция интерфейса

Сообщение Алексей »

докомпилирую интерфейс, рисую кнопку, вешаю событие. все хорошо.

появляется слабовидящий пользователь и устанавливает себе значение в конфиг windows.fontsize=12 и при запуске галактики все мои явно выставленные значения по X Y позиционированию автоматом не умножаются...

если делать изменения ЦРФом - это как то учитывается, а как быть с добавленными программно элементами интьерфейсов ?

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

Re: Докомпиляция интерфейса

Сообщение 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;
если определите коэффициенты точнее поделитесь.
Но выяснилась еще проблема - если системный шрифт в винде стоит не стандартный (средний или крупный или процентом) то этого не хватает
Если найдете функцию как это определить, поделитесь.
Ответить