Страница 1 из 2
API конфигуратора
Добавлено: 02 сен 2010, 07:03
ahv
Если конфигурировать интерфейс визуально из галактики, то для поля (PanelInputLine) можно добавить метку (Label). Можно также при создании поля поставить галочку "Указать заголовок", и тогда тоже будет создана метка.
Обоими способами получается полноценная метка, привязанная к полю, текст которой становится синим, когда соответствующее поле получает фокус.
Вопрос в том, как привязать к полю метку через API конфигуратора? Создается метка без проблем, но она создается непривязанной, и соотвественно ее текст выводится шрифтом темно-зеленого цвета, и синей она никогда не станет.
Бонусный вопрос: что за тип объекта FieldLine?
Re: API конфигуратора
Добавлено: 02 сен 2010, 11:32
BlazeBio
Я метки создаю не с помощью label, а в API конфигуратор через PanelInputLine, указываю skip=true, далее делаю со шрифтом всё, что угодно. А FieldLine вы, где увидели?
Re: API конфигуратора
Добавлено: 02 сен 2010, 12:18
ahv
Для PanelInputLine нужна переменная, а ее нет, т.к. неизвестно количество полей. Если бы можно было как-то массив использовать...
FieldLine в живую не замечал - инача бы вопроса не возникло - но, например, есть константа cfcFieldLine. И функция cfsEnumObjectTypes возвращает среди прочего такой тип.
Re: API конфигуратора
Добавлено: 03 сен 2010, 13:48
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 от унаследнованного стандартного интерфейса - судя по именам, она подсвечиватся не должны, но подсвечиваются... )
Re: API конфигуратора
Добавлено: 06 сен 2010, 05:56
ahv
работает, спасибо
Re: API конфигуратора
Добавлено: 06 сен 2010, 12:03
LaaLaa
Den писал(а):Есть предположение, что в данном случае действует следующий алгоритм привязки метки в контролу текстового ввода : От имени метки отбрасывается 2 символа (префикс Lb) и ищется контрол с таким именем, и если он найден, то устанавливается свзяь метки с контролом данным.
Да связь меток именно так работает.
Re: API конфигуратора
Добавлено: 07 сен 2010, 09:49
ahv
а возможно ли создать поле (PanelInputLine) для элемента массива?
Re: API конфигуратора
Добавлено: 09 июн 2011, 09:26
Алексей
добавил поле типа PanelInputLine pickbutton в L_SKLAD::sopinmov.EditSopr
есть 2 вопроса:
1. как сделать чтобы и по ф3 на клавиатуре тоже событие cmPick отрабатывало.
2. не могу сделать так, чтобы работал cmDelOnProtect... вставил везде где только можно, в них мессаджи, и один фиг - 0 эмоций на нажатии дела.
Re: API конфигуратора
Добавлено: 09 июн 2011, 09:35
Алексей
п1. решил, cfsSetProp(pinput,'StatusCtx','sci1378Esc'); только поменять можно вручную, программно такая строчка почему-то всё равно не отрабатывает, загружается поле с пустым свойством StatusCtx.
З.Ы.: я лошара, надо было передавать не как строку, а как чило cfsSetProp(pinput,'StatusCtx',sci1378Esc);
но DEL всё равно не работает...
Re: API конфигуратора
Добавлено: 09 июн 2011, 11:59
edward_K
для delonprotect нужно Protect:=true + обработка события на это поле.
Re: API конфигуратора
Добавлено: 10 июн 2011, 07:53
Алексей
протект и так тру, это я догадался. а что значит обработка на это событие? я везде где можно понавставлял 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.
Re: API конфигуратора
Добавлено: 10 июн 2011, 11:04
edward_K
влом смотреть, но скорей всего нужно в tableevent table katsopr
Re: API конфигуратора
Добавлено: 10 июн 2011, 13:27
Vik
Да, все верно. Нужно обрабатывать все в обработчике с корневой таблицей KatSopr. Для этого можно использовать, как было предложено выше, tableevent table KatSopr, либо панель с корневой таблицей KatSopr:
Windows EditSopr;
Код: Выделить всё
panel pnHeader;
table KatSopr;
HandleEvent
.......
end;
end;
end;
При этом , должны получить сначала сообщение del1, потом del2
Re: API конфигуратора
Добавлено: 14 июн 2011, 06:29
Алексей
Спасибо, действительно, помогло. плюсану
Re: API конфигуратора
Добавлено: 24 дек 2018, 09:09
Алексей
Перешли тут на атлантис 5.5.32.3, и почему то перестала работать функция cfsSetProp(aself2, 'Origin_X', 48 )); внутри alter interface.
Не меняются ни координаты ни размеры, созданные объекты остаются в верхнем левом углу...никто не сталкивался?