Код: Выделить всё
//--------------------------------------------------
#Doc
Добавить колонку
Add_Column (cfsGetCurrentContainerSelf,'BRWPERSONS','KARTANM' ,10,'Карта' ,12)
#end
Procedure Add_Column(Container:Longint
; ww_browse :string
; ww_fieldname : string
; ww_width: integer
; ww_title:string
; ww_index:integer=30
; isTree :boolean=false
);
{ var ww_int:integer;
var ww_field:longint;
var i :integer;
//----------------- сначала нужно все сдвинуть
/*
iVisHidd.SetVisibleForField( cfsGetCurrentContainerSelf
, GetInterfaceComponentName
, #(__InterfaceName__)
, 'brwPersons');
*/
var Res : integer;
var ObjList : array [1] of string;
var _sSubContName :string;
var sFieldName : string;
_sSubContName := Upcase(Trim(ww_browse));
//Res := cfsSetCurrentContainer(cfsGetCurrentContainerSelf);
Res := cfsSetCurrentContainer(Container);
SetLimit(ObjList, 0);
// загрузить список объектов, вставленных в данный контейнер
if cfsEnumObjects(_sSubContName, ObjList, false) = cfOk
{ //for(i := 1; i <= Count(ObjList); Inc(i))
for(i := Count(ObjList);i>=1; i--)
{ ww_int:=0;
cfsGetProp(ObjList[i], cfpIndex, ww_int);
cfsGetProp(ObjList[i], cfpName , sFieldName);
if ww_int>=ww_index
{ ww_int++;
cfsSetProp(ObjList[i], cfpIndex, ww_int);
}
} //for(i := 1; i <= Count(ObjList); Inc(i))
}
else
{
}
//------------- добавляем колонку
//message('1')
ww_field:=0;
var _sTypeFld:string= if(isTree ,'Tree','' )+'Column';
cfsCreateObject ( _sTypeFld, ww_browse ,ww_fieldname,FALSE,ww_field);
//ww_int:=15;
cfsSetProp(ww_field,'Visible',False);//ww_fieldname
ww_int:=ww_index;
cfsSetProp(ww_field,'Index',ww_int);
cfsSetProp(ww_field,'Protect',True);
//cfsSetProp(ww_fieldname,'Title', ww_title);
//message('2')
//cfsSetProp(ww_fieldname,'SKIP',False);
ww_int:=10;
ww_int:=ww_width;
cfsSetProp(ww_field,'DefaultWidth',ww_int);
cfsSetProp(ww_field,'StatusCtx', 'sci1Esc');
cfsSetProp(ww_field,'Visible',True);
cfsSetProp(ww_field,cfcQuickChoice,True);
cfsSetProp(ww_field,cfpTitle, ww_title);
} //Procedure Add_Column(Container:Longint
//------------------------------------------------------------------------------
#doc
структура для добавления полей в функции ADD_Column_A
#end
Type TAdd_FLD = Record
Fld_Count : Longint;
Fld_Type : Longint;//Тип создаваемых объектов 0 - Column, 1 - TreeColumn
Fld_Name : Array[0..0] Of String ; //Наименование Поля
Fld_Title : Array[0..0] Of String ; //Заголовок поля
Fld_Visible : Array[0..0] Of boolean; //Видимость
Fld_Hidden : Array[0..0] Of boolean; //True - скрыть
Fld_Protect : Array[0..0] Of boolean; //Защитить от ручного ввода
Fld_SKip : Array[0..0] Of boolean; //Запретить позиционирование
Fld_Index : Array[0..0] Of Integer; //
Fld_StatusCtx : Array[0..0] Of Integer; //
Fld_PassiveFormat : Array[0..0] Of String ; //'\2p[|-]36`666`666`666`666.88'
Fld_DefaultWidth : Array[0..0] Of Integer; //Ширина колонки по умолчанию (текстовые координаты)
Fld_ButtonType : Array[0..0] Of Integer; //16 для ... inPickButton + DefaultPickButton=True
Fld_DefaultPickButton: Array[0..0] Of boolean; //
Fld_FontColor : Array[0..0] Of String ; // функция
Fld_FontBold : Array[0..0] Of String ; // функция
end;
#Doc
Добавить колонки
Add_Column_A (cfsGetCurrentContainerSelf,'BRWPERSONS',pAdd_FLD)
#end
Procedure Add_Column_A(Container:Longint
; ww_browse :string
; pAdd_FLD :TAdd_FLD
);
{ var ww_int:integer;
var ww_field:longint;
var i,j :integer;
//----------------- сначала нужно все сдвинуть
/*
iVisHidd.SetVisibleForField( cfsGetCurrentContainerSelf
, GetInterfaceComponentName
, #(__InterfaceName__)
, 'brwPersons');
*/
var Res : integer;
var ObjList : array [1] of string;
var _sSubContName :string;
var sFieldName : string;
_sSubContName := Upcase(Trim(ww_browse));
//Res := cfsSetCurrentContainer(cfsGetCurrentContainerSelf);
Res := cfsSetCurrentContainer(Container);
SetLimit(ObjList, 0);
// загрузить список объектов, вставленных в данный контейнер
var _boObjLoad:boolean=cfsEnumObjects(_sSubContName, ObjList, false) = cfOk;
//------------- добавляем колонку
//message('1')
ww_field:=0;
var _sTypeFld:string= if(pAdd_FLD.Fld_Type=1 ,'Tree','' )+'Column';
var _ObjCount:longint=Count(ObjList);
var _Delta :integer;
For(j:=pAdd_FLD.Fld_Count;j>0;j--)
{ _Delta:=pAdd_FLD.Fld_Count+1-j;
if _boObjLoad
{ for(i := _ObjCount;i>=1; i--)
{ ww_int:=0;
cfsGetProp(ObjList[i], cfpIndex, ww_int);
cfsGetProp(ObjList[i], cfpName , sFieldName);
if ww_int>=pAdd_FLD.Fld_Index[j]
{ ww_int:=ww_int+_Delta;
cfsSetProp(ObjList[i], cfpIndex, ww_int);
}
if ww_int>0
if ww_int<=pAdd_FLD.Fld_Index[j]
{ _ObjCount:=i; break;// По идее дальше сдвигать не нужно
}
}
} //if _boObjLoad
cfsCreateObject ( _sTypeFld, ww_browse ,pAdd_FLD.Fld_name[j],FALSE,ww_field);
//ww_int:=15;
cfsSetProp(ww_field,'Visible',False);//ww_fieldname
ww_int:=pAdd_FLD.Fld_Index[j]+(_Delta-1);// сложный вопрос
cfsSetProp(ww_field,'Index',ww_int);
cfsSetProp(ww_field,'Protect', pAdd_FLD.Fld_Protect[j]);
//cfsSetProp(ww_fieldname,'Title', ww_title);
//message('2')
cfsSetProp(ww_field,'SKIP',False);
ww_int:=10;
if pAdd_FLD.Fld_DefaultWidth[j]>0
ww_int:=pAdd_FLD.Fld_DefaultWidth[j];
cfsSetProp(ww_field,'DefaultWidth',ww_int);
cfsSetProp(ww_field,'StatusCtx', 'sci1Esc');
if pAdd_FLD.Fld_StatusCtx[j]<>0
cfsSetProp(ww_field,'StatusCtx', pAdd_FLD.Fld_StatusCtx[j]);
cfsSetProp(ww_field,'Visible',pAdd_FLD.Fld_Visible[j]);
cfsSetProp(ww_field,'Hidden' ,pAdd_FLD.Fld_Visible[j]);
cfsSetProp(ww_field,cfcQuickChoice,True);
cfsSetProp(ww_field,cfpTitle, pAdd_FLD.Fld_title[j]);
cfsSetProp(ww_field,cfpSKip, pAdd_FLD.Fld_SKip[j]);
cfsSetProp(ww_field,cfpPassiveFormat ,pAdd_FLD.Fld_PassiveFormat ); //'\2p[|-]36`666`666`666`666.88'
cfsSetProp(ww_field,cfpDefWidth ,pAdd_FLD.Fld_DefaultWidth ); //Ширина колонки по умолчанию (текстовые координаты)
cfsSetProp(ww_field,cfpButtonType ,pAdd_FLD.Fld_ButtonType ); //16 для ... inPickButton + DefaultPickButton=True
cfsSetProp(ww_field,cfpDefaultPickButton,pAdd_FLD.Fld_DefaultPickButton); //
cfsSetProp(ww_field,cfpFontColor ,pAdd_FLD.Fld_FontColor ); // функция
cfsSetProp(ww_field,cfpFontBold ,pAdd_FLD.Fld_FontBold ); // функция
}//For(j:=pAdd_FLD.Fld_Count;j>0;j--)
} //Procedure Add_Column(Container:Longint
Добавляете сие в объект со static и добавление сводится к вызову одной функции. Если обратите внимание они умеют добавлять в любое место. Вторая функция удобна, когда нужно добавить несколько колонок.