API конфигуратора
Модераторы: m0p3e, edward_K, Модераторы
API конфигуратора
Если конфигурировать интерфейс визуально из галактики, то для поля (PanelInputLine) можно добавить метку (Label). Можно также при создании поля поставить галочку "Указать заголовок", и тогда тоже будет создана метка.
Обоими способами получается полноценная метка, привязанная к полю, текст которой становится синим, когда соответствующее поле получает фокус.
Вопрос в том, как привязать к полю метку через API конфигуратора? Создается метка без проблем, но она создается непривязанной, и соотвественно ее текст выводится шрифтом темно-зеленого цвета, и синей она никогда не станет.
Бонусный вопрос: что за тип объекта FieldLine?
Обоими способами получается полноценная метка, привязанная к полю, текст которой становится синим, когда соответствующее поле получает фокус.
Вопрос в том, как привязать к полю метку через API конфигуратора? Создается метка без проблем, но она создается непривязанной, и соотвественно ее текст выводится шрифтом темно-зеленого цвета, и синей она никогда не станет.
Бонусный вопрос: что за тип объекта FieldLine?
Re: API конфигуратора
Я метки создаю не с помощью label, а в API конфигуратор через PanelInputLine, указываю skip=true, далее делаю со шрифтом всё, что угодно. А FieldLine вы, где увидели?
Re: API конфигуратора
Для PanelInputLine нужна переменная, а ее нет, т.к. неизвестно количество полей. Если бы можно было как-то массив использовать...
FieldLine в живую не замечал - инача бы вопроса не возникло - но, например, есть константа cfcFieldLine. И функция cfsEnumObjectTypes возвращает среди прочего такой тип.
FieldLine в живую не замечал - инача бы вопроса не возникло - но, например, есть константа cfcFieldLine. И функция cfsEnumObjectTypes возвращает среди прочего такой тип.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: API конфигуратора
Есть предположение, что в данном случае действует следующий алгоритм привязки метки в контролу текстового ввода :
От имени метки отбрасывается 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 от унаследнованного стандартного интерфейса - судя по именам, она подсвечиватся не должны, но подсвечиваются... )
От имени метки отбрасывается 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 конфигуратора
работает, спасибо
Re: API конфигуратора
Да связь меток именно так работает.Den писал(а):Есть предположение, что в данном случае действует следующий алгоритм привязки метки в контролу текстового ввода : От имени метки отбрасывается 2 символа (префикс Lb) и ищется контрол с таким именем, и если он найден, то устанавливается свзяь метки с контролом данным.
Re: API конфигуратора
а возможно ли создать поле (PanelInputLine) для элемента массива?
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: API конфигуратора
добавил поле типа PanelInputLine pickbutton в L_SKLAD::sopinmov.EditSopr
есть 2 вопроса:
1. как сделать чтобы и по ф3 на клавиатуре тоже событие cmPick отрабатывало.
2. не могу сделать так, чтобы работал cmDelOnProtect... вставил везде где только можно, в них мессаджи, и один фиг - 0 эмоций на нажатии дела.
есть 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 всё равно не работает...
З.Ы.: я лошара, надо было передавать не как строку, а как чило cfsSetProp(pinput,'StatusCtx',sci1378Esc);
но DEL всё равно не работает...
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: API конфигуратора
для delonprotect нужно Protect:=true + обработка события на это поле.
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: API конфигуратора
протект и так тру, это я догадался. а что значит обработка на это событие? я везде где можно понавставлял cmDelOnProtect и мессаг, и везде тишина...
cfsSetProp(pinput,'StatusCtx',sci1378Esc); - эта строчка не отрабатывает почему-то.
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.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: API конфигуратора
влом смотреть, но скорей всего нужно в tableevent table katsopr
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: API конфигуратора
Да, все верно. Нужно обрабатывать все в обработчике с корневой таблицей KatSopr. Для этого можно использовать, как было предложено выше, tableevent table KatSopr, либо панель с корневой таблицей KatSopr:
Windows EditSopr;
При этом , должны получить сначала сообщение del1, потом del2
Windows EditSopr;
Код: Выделить всё
panel pnHeader;
table KatSopr;
HandleEvent
.......
end;
end;
end;
-
- Местный житель
- Сообщения: 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.
Не меняются ни координаты ни размеры, созданные объекты остаются в верхнем левом углу...никто не сталкивался?
Не меняются ни координаты ни размеры, созданные объекты остаются в верхнем левом углу...никто не сталкивался?