API конфигуратора

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

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

ahv
Новичок
Сообщения: 21
Зарегистрирован: 15 дек 2009, 07:52

API конфигуратора

Сообщение ahv »

Если конфигурировать интерфейс визуально из галактики, то для поля (PanelInputLine) можно добавить метку (Label). Можно также при создании поля поставить галочку "Указать заголовок", и тогда тоже будет создана метка.
Обоими способами получается полноценная метка, привязанная к полю, текст которой становится синим, когда соответствующее поле получает фокус.

Вопрос в том, как привязать к полю метку через API конфигуратора? Создается метка без проблем, но она создается непривязанной, и соотвественно ее текст выводится шрифтом темно-зеленого цвета, и синей она никогда не станет.

Бонусный вопрос: что за тип объекта FieldLine?
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: API конфигуратора

Сообщение BlazeBio »

Я метки создаю не с помощью label, а в API конфигуратор через PanelInputLine, указываю skip=true, далее делаю со шрифтом всё, что угодно. А FieldLine вы, где увидели?
ahv
Новичок
Сообщения: 21
Зарегистрирован: 15 дек 2009, 07:52

Re: API конфигуратора

Сообщение ahv »

Для PanelInputLine нужна переменная, а ее нет, т.к. неизвестно количество полей. Если бы можно было как-то массив использовать...

FieldLine в живую не замечал - инача бы вопроса не возникло - но, например, есть константа cfcFieldLine. И функция cfsEnumObjectTypes возвращает среди прочего такой тип.
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: API конфигуратора

Сообщение Den »

Есть предположение, что в данном случае действует следующий алгоритм привязки метки в контролу текстового ввода :
От имени метки отбрасывается 2 символа (префикс Lb) и ищется контрол с таким именем, и если он найден, то устанавливается свзяь метки с контролом данным.
Пример показывает данное правило (специально даже запихал метку и контол ввода подалльше друг от друга):

...
alter interface VSCHET ;
var
st,aself,aSelf1,cur_cont : longint ;
cur_o,cont_i,aObjType : string ;
c1: comp ;
s1 : string ;
i: integer ;
afield : string ;
;
WinDow WVSCHETZ ;
HandleEvent
CmInit : {
if ( inherited :: handleEvent (cminit)=heOk)
{
st:=cfsGetObjInfo(
'SCVSCHET' ,
cur_o ,
aself ,
cont_i ,
aObjType
);
if st=cfok
{
st:=cfsCreateObject ('PanelInputline',
aself ,
'Field: basedoc.descr',
false,
aSelf1 );

if st=cfok
{
cfsSetProp(aself1, 'Origin_X', 638);
cfsSetProp(aself1, 'Origin_Y', 12);
cfsSetProp(aself1, 'Size_X', 100);
cfsSetProp(aself1, 'Size_y', 11);

}
st:=cfsCreateObject ('label',
aSelf ,
'LbField: basedoc.descr',
false,
aSelf1 );
if st=cfok
{
cfsSetProp(aself1, 'Origin_X', 335);
cfsSetProp(aself1, 'Origin_Y', 183);
cfsSetProp(aself1, 'Size_X', 35);
cfsSetProp(aself1, 'Size_y', 14);
cfsSetProp(aself1, 'Title', 'Юзверь');
}
}
}
}
end;
end;
end.

Хотя при разработке своего интер-са, при описании видимых элементов поля связываются ,видимо, по другому правилу. В этом фейсе при конфигурировании окна WVSCHETZ можно посмотреть связки label/panelinput от унаследнованного стандартного интерфейса - судя по именам, она подсвечиватся не должны, но подсвечиваются... )
ahv
Новичок
Сообщения: 21
Зарегистрирован: 15 дек 2009, 07:52

Re: API конфигуратора

Сообщение ahv »

работает, спасибо
LaaLaa

Re: API конфигуратора

Сообщение LaaLaa »

Den писал(а):Есть предположение, что в данном случае действует следующий алгоритм привязки метки в контролу текстового ввода : От имени метки отбрасывается 2 символа (префикс Lb) и ищется контрол с таким именем, и если он найден, то устанавливается свзяь метки с контролом данным.
Да связь меток именно так работает.
ahv
Новичок
Сообщения: 21
Зарегистрирован: 15 дек 2009, 07:52

Re: API конфигуратора

Сообщение ahv »

а возможно ли создать поле (PanelInputLine) для элемента массива?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: API конфигуратора

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

добавил поле типа PanelInputLine pickbutton в L_SKLAD::sopinmov.EditSopr
есть 2 вопроса:
1. как сделать чтобы и по ф3 на клавиатуре тоже событие cmPick отрабатывало.
2. не могу сделать так, чтобы работал cmDelOnProtect... вставил везде где только можно, в них мессаджи, и один фиг - 0 эмоций на нажатии дела.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: API конфигуратора

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

п1. решил, cfsSetProp(pinput,'StatusCtx','sci1378Esc'); только поменять можно вручную, программно такая строчка почему-то всё равно не отрабатывает, загружается поле с пустым свойством StatusCtx.

З.Ы.: я лошара, надо было передавать не как строку, а как чило cfsSetProp(pinput,'StatusCtx',sci1378Esc);
но DEL всё равно не работает... :(
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: API конфигуратора

Сообщение edward_K »

для delonprotect нужно Protect:=true + обработка события на это поле.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: API конфигуратора

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

протект и так тру, это я догадался. а что значит обработка на это событие? я везде где можно понавставлял cmDelOnProtect и мессаг, и везде тишина...
cfsSetProp(pinput,'StatusCtx',sci1378Esc); - эта строчка не отрабатывает почему-то.

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

#Component "L_SKLAD"

alter interface sopinmov;
create view from stepdoc stepdocLDV, basedoc basedocLDV, 
                 basedoc ldv(BASEDOC05), stepdoc ldvStep, katmc ldvkatmc
where
((
    katsopr.cstepdoc    == stepdocLDV.nrec
and stepdocLDV.cbasedoc == basedocLDV.nrec

and 550                 == ldv.viddoc // для выбора
and ldv.nrec            == ldvstep.cbasedoc
and ldvstep.nrec        == spstep.cstepdoc
and 1                   == spstep.prmc
and spstep.cmcusl       == ldvkatmc.nrec
));
var pinput : longint;

procedure LoadCfgBut;
{
cfsCreateObject('PanelInputLine','SCRHEADER','basedocLDV.nodoc',FALSE,pinput);
cfsSetProp(pinput,'Origin_X',622);
cfsSetProp(pinput,'Origin_Y',184);
cfsSetProp(pinput,'Size_X',121);
cfsSetProp(pinput,'Size_Y',14);
cfsSetProp(pinput,'Pickbutton','true');
cfsSetProp(pinput,'Protect'   ,'true');
cfsSetProp(pinput,'StatusCtx',sci1378Esc);
cfsSetProp(pinput,'HelpLine','ЛДВ');


cfsCreateObject ('label','SCRHEADER','LbbasedocLDV.nodoc',false,pinput);
cfsSetProp(pinput, 'Origin_X', 587);
cfsSetProp(pinput, 'Origin_Y', 184);
cfsSetProp(pinput, 'Size_X', 27);
cfsSetProp(pinput, 'Size_y', 14);
cfsSetProp(pinput, 'Title', 'ЛДВ');
}

//================ Окно выбора ЛДВ =======================================
Window seeLDV cyan, doAccept;
browse brLDV;
table ldv;
fields
 ldv.descr 'Дескр' :[10],protect;
 ldv.desgr 'Группа':[10],protect;
 ldv.nodoc 'Номер' :[25],protect;
 ldv.ddoc  'Дата'  :[15],protect;
end;
end;
//=======================================================
Window Editsopr;
HandleEvent
cmPick:
{
 if ( inherited :: handleEvent (cmPick)=heOk)
 {
  if curfield=#basedocLDV.nodoc then 
  { 
    if message('Привязать накладную к ЛДВ?',YESNO)=cmNO then {abort; exit}
    if (getlast ldv=tsOK) {}
    if (RunWindowModal(seeLDV) <> cmCancel) then
    {
     set katsopr.cstepdoc := ldvstep.nrec;
     if message('Вставить спецификацию МЦ из ЛДВ?',YESNO)=YES then
     {
      StartNewVisual(vtRotateVisual, vfTimer, 'Перенос МЦ из ЛДВ', 1);
      _Loop spstep
      {
         clearbuffer(#spsopr);
         spsopr.npp     := spstep.npp;
         spsopr.cmcusl  := spstep.cmcusl;
         spsopr.kolfact := spstep.kol;
         spsopr.kol     := spstep.kol;
         spsopr.kolopl  := spstep.kol;
         insert current spsopr;
      }
//      RecalcSumm(true); пересчет сумм, если понадобиться.
      StopVisual('',0);
     }
    }
  }
 }
}
cmDelOnProtect:
{
 message('del1');
}
end;
end;

HandleEvent
cmDelOnProtect:
{
 message('del2');
}
cmInit:
{
 if (inherited :: handleevent(cmInit)<>heOK) then abort;
 LoadCfgBut;
}
end;
end.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: API конфигуратора

Сообщение edward_K »

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

Re: API конфигуратора

Сообщение Vik »

Да, все верно. Нужно обрабатывать все в обработчике с корневой таблицей KatSopr. Для этого можно использовать, как было предложено выше, tableevent table KatSopr, либо панель с корневой таблицей KatSopr:

Windows EditSopr;

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

panel pnHeader;
table KatSopr;
HandleEvent
 .......
end;
end;
end;
При этом , должны получить сначала сообщение del1, потом del2
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: API конфигуратора

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

Спасибо, действительно, помогло. плюсану :)
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: API конфигуратора

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

Перешли тут на атлантис 5.5.32.3, и почему то перестала работать функция cfsSetProp(aself2, 'Origin_X', 48 )); внутри alter interface.
Не меняются ни координаты ни размеры, созданные объекты остаются в верхнем левом углу...никто не сталкивался?
Ответить