Программно изменить порядок полей в browse
Модераторы: m0p3e, edward_K, Модераторы
Программно изменить порядок полей в browse
Собственно возник такой вопрос:
Сделал свою таблицу с несколькими полями и браузер по ней. В зависимости от определенных критериев, некоторые колонки нужно показать, некоторые-скрыть(cmPositionChanged). Видимые отсортировать в определенном порядке. Показать/скрыть - не вопрос, но как отсортировать? как поменять колонки местами?
Пробовал добавлять динамически-все гуд, но на поля нужно навесить кнопку и обработать cmPick. Все поля однотипные и действия, которые нужно выполнить одинаковые.
Сделал свою таблицу с несколькими полями и браузер по ней. В зависимости от определенных критериев, некоторые колонки нужно показать, некоторые-скрыть(cmPositionChanged). Видимые отсортировать в определенном порядке. Показать/скрыть - не вопрос, но как отсортировать? как поменять колонки местами?
Пробовал добавлять динамически-все гуд, но на поля нужно навесить кнопку и обработать cmPick. Все поля однотипные и действия, которые нужно выполнить одинаковые.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
скорей всего у вас не все inc подключены
нужен cfg_all.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;
что-то ничерта не получается...
как только не приседал...
как только не приседал...
Код: Выделить всё
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.
решил так: код не оптимизирован, но все же...
Может можно как-то проще?
Может можно как-то проще?
Код: Выделить всё
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.