Программно изменить порядок полей в browse

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

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

Ответить
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Программно изменить порядок полей в browse

Сообщение Alexander »

Собственно возник такой вопрос:
Сделал свою таблицу с несколькими полями и браузер по ней. В зависимости от определенных критериев, некоторые колонки нужно показать, некоторые-скрыть(cmPositionChanged). Видимые отсортировать в определенном порядке. Показать/скрыть - не вопрос, но как отсортировать? как поменять колонки местами?
Пробовал добавлять динамически-все гуд, но на поля нужно навесить кнопку и обработать cmPick. Все поля однотипные и действия, которые нужно выполнить одинаковые.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

cfsSetProp
второй параметр
cfpIndex
тока видимо нужно сначала освобождать поле с таким то индексом, а потом туда пихать новое. SetFormat все таки проще использовать.
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

edward_K писал(а):cfsSetProp
второй параметр
cfpIndex
тока видимо нужно сначала освобождать поле с таким то индексом, а потом туда пихать новое. SetFormat все таки проще использовать.
что-то не получается...
cfsSetProp('my_field', cfpIndex, 10);
компилятор ругается на cfpIndex...
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Сообщение Masygreen »

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

Сообщение edward_K »

скорей всего у вас не все inc подключены
нужен cfg_all.inc
вот кусочек из него

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

const cfpName               = 1001;
const cfpOrigin_X           = 1002;
const cfpOrigin_Y           = 1003;
const cfpSize_X             = 1006;
const cfpSize_Y             = 1007;
const cfpVisible            = 1010;
const cfpHidden             = 1011;
const cfpProtect            = 1012;
const cfpSkip               = 1013;
const cfpHelpCtx            = 1014;
const cfpStatusCtx          = 1015;
const cfpTitle              = 1016;
const cfpTabs               = 1017;
const cfpLink               = 1018;
const cfpPalette            = 1019;
const cfpCentered           = 1020;
const cfpExprStr            = 1021;
const cfpField              = 1022;
const cfpCharSet            = 1023;
const cfpPoints             = 1024;
const cfpPrecisionVarName   = 1025;
const cfpDefaultValue       = 1026;
const cfpMaxLen             = 1027;
const cfpUpCase             = 1028;
const cfpHistoryId          = 1029;
const cfpPassword           = 1030;
const cfpNoValidCheck       = 1031;
const cfpPassiveFormat      = 1032;
const cfpFormat             = 1033;
const cfpUptoDate           = 1034;
const cfpPickButton         = 1035;
const cfpLessNull           = 1036;
const cfpStrings            = 1037;
const cfpCommand            = 1038;
const cfpDefault            = 1039;
const cfpLeftJustify        = 1040;
const cfpTable              = 1041;
const cfpIndex              = 1042;
const cfpDataIndex          = 1043;
const cfpChecked            = 1044;
const cfpOriginal           = 1045;
const cfpItems              = 1046;
const cfpHelpLine           = 1047;
const cfpHotKey             = 1048;
const cfpMenuItemParams     = 1049;

const cfpRectA_X            = 1050;
const cfpRectA_Y            = 1051;
const cfpRectB_X            = 1052;
const cfpRectB_Y            = 1053;

const cfpSDIWindow          = 1054;
const cfpAlwaysOnTop        = 1055;
const cfpFieldName          = 1056;

const cfpStringsNull        = 1057;
const cfpDesignerState      = 1058;

const cfpTextAlign          = 1059;
const cfpCalcButton         = 1060;
const cfpDefWidth           = 1061;

const cfpParamType          = 1062;
const cfpValue              = 1063;
const cfpMayBeCollected     = 1064;

const cfpNoResize           = 1065;
const cfpNoMove             = 1066;
const cfpNoResort           = 1067;

const cfpMayBeSaved         = 1068;

const cfpSpinButton         = 1069;
const cfpSpinInc            = 1070;
const cfpSpinMin            = 1071;
const cfpSpinMax            = 1072;

const cfpLines              = 1169;
const cfpIdle               = 1170;
const cfpHistoryLines       = 1171;

const cfpBevelName          = 1172;
const cfpStyle              = 1173;
const cfpShape              = 1174;

const cfpSlider             = 1175;

const cfpFrame              = 1176;

const cfpExcelColumns       = 1177;
const cfpNoAutoSize         = 1178;

const cfpNoStatic           = 1179;
const cfpEnumValues         = 1180;

const cfpFixed_XSize        = 1181;
const cfpFixed_YSize        = 1182;
const cfpModifiedState      = 1183;  
const cfpManualHScroll      = 1184;	
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

что-то ничерта не получается...
как только не приседал...

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

const
   #include cfg_all.inc
end;
interface Mytest;
table struct t1
(
f1 : string,
p2 : double,
p3 : double
);
create view
as select 0 (fieldname=newpole),* from t1;
browse br1 'Browse';
show at(,6,,20);
table t1;
fields
t1.f1  : [10],protect;
t1.p2  : [10],protect;
end;

screen scr1 'screen'
show at(,21,,);
buttons
cmok;
<<
<.ok.>
>>
end;

handleevent
cmok:
{
cfsSetCurrentContainer('MYTEST');

cfsSetProp('c_br1_t1.f1', cfpTitle, 'name1');
cfsSetProp('c_br1_t1.p2', cfpTitle, 'name2');
cfsSetProp('c_br1_t1.f1', cfpIndex, 2);
cfsSetProp('c_br1_t1.p2', cfpIndex, 0);
cfsSetProp('c_br1_t1.f1', cfpIndex, 1);

var a:integer;
cfsGetProp('c_br1_t1.f1', cfpIndex, a);
message(a);
cfsGetProp('c_br1_t1.p2', cfpIndex, a);
message(a);

rescanpanel(#t1);
}
cminit:
{
insert t1 set t1.f1='запись 1', t1.p2 = 111 ;
insert t1 set t1.f1='запись 2', t1.p2 = 222 ;
}

end;
end.
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

решил так: код не оптимизирован, но все же...
Может можно как-то проще?

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

const
   #include cfg_all.inc
end;
interface Mytest;
table struct t1
(
f1 : string,
p2 : double,
p3 : double
);
create view
as select 0 (fieldname=newpole),* from t1;
browse br1 'Browse';
show at(,6,,20);
table t1;
fields
f1 : pickbutton;
p2;
end;

screen scr1 'screen'
show at(,21,,);
buttons
cmok;
cmok1;
<<
<.ok.> <.Ok1.>
>>
end;

handleevent
cmok:
{
cfsSetCurrentContainer('MYTEST');
var p2self, err, aself : longint;
cfsDestroyObject('c_br1_t1.p2');
cfsDestroyObject('c_br1_t1.f1');
err:=cfsCreateObject('Column','BR1','c_br1_t1.f1',false,p2self);
cfsSetProp('c_br1_t1.f1', 'FieldName','t1.f1');
cfsSetProp('c_br1_t1.f1', cfpPickButton, true);
cfsCreateObject('Column','BR1','c_br1_t1.p2',false,p2self);
cfsSetProp('c_br1_t1.p2', 'FieldName','t1.p2');

cfsSetProp('c_br1_t1.f1', cfpTitle, 'name1');
cfsSetProp('c_br1_t1.p2', cfpTitle, 'name2');
rescanpanel(#t1);
}
cmok1:{
cfsSetCurrentContainer('MYTEST');
var p2self, err, aself : longint;
cfsDestroyObject('c_br1_t1.p2');
cfsDestroyObject('c_br1_t1.f1');
cfsCreateObject('Column','BR1','c_br1_t1.p2',false,p2self);
cfsSetProp('c_br1_t1.p2', 'FieldName','t1.p2');
err:=cfsCreateObject('Column','BR1','c_br1_t1.f1',false,p2self);
cfsSetProp('c_br1_t1.f1', 'FieldName','t1.f1');
cfsSetProp('c_br1_t1.f1', cfpPickButton, true);
cfsSetProp('c_br1_t1.f1', cfpTitle, 'name1');
cfsSetProp('c_br1_t1.p2', cfpTitle, 'name2');
rescanpanel(#t1);

}
cminit:
{
insert t1 set t1.f1='запись 1', t1.p2 = 111 ;
insert t1 set t1.f1='запись 2', t1.p2 = 222 ;
}
cmPick:{
   message('Ура');
}
end;
end.
Ответить