Вверх ↑
Ответов: 2293
Рейтинг: 678
#1: 2024-12-06 14:20:01 ЛС | профиль | цитата
nesco, вот еще схема для наглядности и понимания вывода сообщений при потери фокуса у дополнительного контрола.
Add(MainForm,2953706,70,105)
{
Width=778
Height=582
Position=1
link(onCreate,10041622:doEnum,[])
}
Add(MST_UseEditCtrl,5561109,182,259)
{
MSTControl="testTable"
link(onCellSize,12756869:doRect,[])
link(onEnterCell,5484721:doValue,[])
link(onEscCell,7922413:doEvent1,[(226,279)(226,398)])
}
Add(Memory,5484721,315,266)
{
Point(Data)
link(onData,15587215:doEvent1,[])
link(Data,5561109:Cell,[(321,254)(230,254)(230,303)(209,303)])
}
Add(Memory,10271330,126,231)
{
}
Add(If_else,16568077,308,406)
{
@Hint=#52:Проверка на разницу данных до редактирования и после|
link(onTrue,14792882:doString,[])
link(onFalse,3558215:doString,[(370,419)(370,517)])
link(Op1,10271330:Value,[(314,327)(132,327)])
link(Op2,5484721:Value,[])
}
Add(MTStrTbl,5133893,266,105)
{
Left=10
Top=5
Width=745
Height=420
Font=[MS Sans Serif,12,0,0,1]
Name="testTable"
Columns=#4:№=40|9:Фильм=200|9:Год=60==2|11:Жанр=200==2|12:Описание=500|0:|
Grid=0
}
Add(StrList,15034837,119,63)
{
Strings=#49:1;Звездные войны;1980;фантастика;Фильм о войнах )|32:2;1+1;2003;комедия;Фильм о двух |39:3;Убить Билла;1990;боевик;Убивают Билла|53:4;Крепкий орешик 2;1999;боевик;Встретил жену с работы|52:5;Куб;1993;фантастика;Для любителей трехмерных фигур|48:6;Аватар;2004;фантастика;Управляют синими телами|
}
Add(MT_String,922736,182,105)
{
link(onResult,2904434:doRowAction,[])
}
Add(ArrayEnum,10041622,133,119)
{
link(onItem,922736:doMTString,[])
link(Array,15034837:Array,[])
}
Add(MST_RowAction,2904434,224,105)
{
MSTControl="testTable"
}
Add(ChildPanelEx,12756869,406,259)
{
link(Index,8653266:getVar,[])
link(onChange,3117519:doEvent1,[(460,265)(460,192)(69,192)(69,237)])
link(onKillFocus,15319488:doWork,[(459,272)(459,363)])
}
BEGIN_SDK
Add(EditMultiEx,14376481,21,21)
{
WorkCount=#6:doRect|7:doStart|6:doStop|
EventCount=#8:onChange|11:onKillFocus|
DataCount=#5:Index|
Width=818
Height=613
link(doRect,14215607:doValue,[])
link(doStart,10318564:doCompare,[(42,34)(42,223)])
link(doStop,1059799:doEvent1,[(34,41)(34,433)])
}
Add(Panel,5130657,609,63)
{
Left=35
Top=105
Visible=1
BevelInner=0
Point(doLeft)
Point(doTop)
Point(doWidth)
Point(doHeight)
Point(doVisible)
}
Add(IndexToChanel,981480,147,224)
{
Count=5
Point(Index)
link(onEvent2,2554451:doWork1,[(259,237)])
link(onEvent3,3747397:doEvent1,[(219,244)(219,468)])
link(onEvent4,3299747:doEvent1,[])
link(Index,11075478:Var3,[(153,182)])
link(onEvent5,2554451:doWork2,[])
}
Add(MT_MultiData,13383753,329,70)
{
Count=4
Point(Data)
link(onData1,5130657:doLeft,[])
link(onData2,8998097:doOperation,[])
link(onData3,5130657:doWidth,[])
link(onData4,4482135:doWork2,[])
link(Data,14215607:Value,[])
}
Add(Hub,3299747,273,245)
{
OutCount=5
link(onEvent1,10874155:doWork2,[(308,251)(308,307)])
link(onEvent2,12973147:doBringToFront,[])
link(onEvent3,12973147:doSelectString,[])
link(onEvent4,12973147:doSetFocus,[])
link(onEvent5,6349023:doCalc,[(406,279)(406,335)])
}
Add(MT_Memory,14215607,329,21)
{
}
Add(ChanelToIndex,10874155,322,294)
{
link(onIndex,12973147:doVisible,[(412,300)(412,279)])
}
Add(Edit,11196193,420,378)
{
Left=1155
Top=1175
Align=5
Color=8421631
Font=[MS Sans Serif,12,0,0,1]
Visible=1
WinStyle=1
Text=""
Point(doBringToFront)
Point(doSetFocus)
Point(doVisible)
Point(onKillFocus)
link(onChange,6115875:doWork2,[])
link(onEnter,11308046:doWork2,[])
link(onKillFocus,7354813:doWork2,[])
}
Add(Hub,5035439,266,364)
{
OutCount=4
link(onEvent1,11308528:doWork2,[(294,370)(294,419)])
link(onEvent2,11196193:doBringToFront,[(385,377)(385,398)])
link(onEvent3,11196193:doSetFocus,[(376,384)(376,405)])
link(onEvent4,11196193:doText2,[])
}
Add(ChanelToIndex,11308528,322,406)
{
link(onIndex,11196193:doVisible,[])
}
Add(Hub,1059799,70,427)
{
InCount=2
link(onEvent1,3963705:doEvent,[(94,433)(94,384)])
link(onEvent2,5685364:doWork1,[(237,440)(237,111)])
}
Add(Edit,6525929,420,476)
{
Left=1155
Top=1175
Align=5
Color=8421631
Font=[MS Sans Serif,12,0,0,1]
Visible=1
WinStyle=1
Text=""
Alignment=2
DataType=1
MaxLenField=4
Point(doBringToFront)
Point(doSetFocus)
Point(doVisible)
Point(onKillFocus)
link(onChange,6115875:doWork3,[(660,482)])
link(onEnter,15760508:doWork2,[])
link(onKillFocus,15760508:doWork3,[(689,496)])
}
Add(Hub,3747397,259,462)
{
OutCount=4
link(onEvent1,5790774:doWork2,[(280,468)(280,517)])
link(onEvent2,6525929:doBringToFront,[(385,475)(385,496)])
link(onEvent3,6525929:doSetFocus,[(376,482)(376,503)])
link(onEvent4,6525929:doText2,[])
}
Add(ChanelToIndex,5790774,322,504)
{
link(onIndex,6525929:doVisible,[])
}
Add(Hub,7068085,105,217)
{
OutCount=3
link(onEvent1,13383753:doSeparateMT,[(131,223)(131,76)])
link(onEvent2,981480:doEvent,[])
link(onEvent3,5685364:doWork2,[(143,237)(143,118)])
}
Add(ChanelToIndex,5685364,329,105)
{
link(onIndex,5130657:doVisible,[(383,111)(383,104)])
}
Add(HubEx,2554451,255,252)
{
Angle=1
link(onEvent,5035439:doEvent1,[(259,370)])
}
Add(HubEx,7029855,656,217)
{
Angle=3
link(onEvent,14376481:onChange,[(660,27)])
}
Add(HubEx,6115875,656,378)
{
Angle=3
link(onEvent,7029855:doWork3,[])
}
Add(If_else,10318564,63,217)
{
Type=5
Op2=Integer(0)
link(onTrue,7068085:doEvent1,[])
link(Op1,10602446:Var2,[])
AddHint(6,-25,21,13,Op2)
}
Add(GetDataEx,10602446,63,177)
{
Angle=3
link(Data,14376481:Index,[(27,182)])
}
Add(Math,5639590,406,70)
{
OpType=1
Op2=1
}
Add(Math,8998097,455,77)
{
OpType=1
Op2=1
link(onResult,5130657:doTop,[])
}
Add(ListBox,12973147,469,224)
{
Left=465
Top=255
Align=5
Color=8421631
Font=[MS Sans Serif,12,0,0,1]
Visible=1
Strings=#6:боевик|7:комедия|10:фантастика|
DataType=1
Point(doBringToFront)
Point(doSelectString)
Point(onKillFocus)
Point(doSetFocus)
Point(doVisible)
link(onClick,2883110:doEvent1,[(513,237)(513,223)])
link(onKillFocus,5573420:doWork2,[])
}
Add(MathParse,6349023,476,329)
{
DataCount=1
MathStr="%1 * 22 "
link(onResult,4482135:doWork3,[(571,335)])
link(X1,12973147:Count,[])
}
Add(HubEx,4482135,567,91)
{
link(onEvent,5130657:doHeight,[])
}
Add(Hub,2883110,525,217)
{
link(onEvent1,7029855:doWork2,[])
link(onEvent2,5785315:doWork2,[])
}
Add(IndexToChanel,3963705,105,378)
{
Count=5
Point(Index)
link(onEvent2,1512234:doWork1,[(171,391)])
link(onEvent3,5790774:doWork1,[(154,398)(154,510)])
link(onEvent4,10874155:doWork1,[(147,405)(147,300)])
link(onEvent5,1512234:doWork2,[])
link(Index,11075478:Var2,[])
}
Add(HubEx,1512234,167,406)
{
link(onEvent,11308528:doWork1,[])
}
Add(GetDataEx,11075478,105,177)
{
Angle=3
link(Data,10602446:Var3,[])
}
Add(HubEx,5785315,685,224)
{
Angle=3
link(onEvent,14376481:onKillFocus,[(689,34)])
}
Add(HubEx,5573420,685,238)
{
Angle=3
link(onEvent,5785315:doWork3,[])
}
Add(HubEx,11308046,685,385)
{
Angle=3
link(onEvent,5573420:doWork3,[])
}
Add(HubEx,7354813,685,392)
{
Angle=3
link(onEvent,11308046:doWork3,[])
}
Add(HubEx,15760508,685,483)
{
Angle=3
link(onEvent,7354813:doWork3,[])
}
END_SDK
Add(Hub,7922413,238,392)
{
InCount=2
OutCount=3
link(onEvent1,13112036:doWork2,[(383,398)(383,321)])
link(onEvent2,12756869:doStop,[(393,405)(393,279)])
link(onEvent3,4332492:doCalc,[])
}
Add(Hub,3117519,91,231)
{
link(onEvent1,1993221:doWork2,[])
link(onEvent2,5561109:doSetData,[(116,244)(116,265)])
}
Add(HubEx,1993221,112,231)
{
link(onEvent,10271330:doValue,[])
}
Add(Hub,15587215,357,266)
{
OutCount=3
link(onEvent1,12756869:doStart,[])
link(onEvent2,1993221:doWork1,[(376,279)(376,224)(116,224)])
link(onEvent3,13112036:doWork1,[(384,286)(384,314)])
}
Add(LineBreakEx,7209891,189,357)
{
Caption="col"
Type=3
link(_Data,5561109:SubItem,[])
}
Add(LineBreakEx,15433687,196,343)
{
Caption="row"
Type=3
link(_Data,5561109:Index,[])
}
Add(LineBreakEx,5725187,896,364)
{
Caption="col"
Type=2
}
Add(LineBreakEx,12280975,903,378)
{
Caption="row"
Type=2
}
Add(LineBreakEx,8653266,406,231)
{
Caption="col"
Type=2
}
Add(FormatStr,14792882,896,406)
{
DataCount=3
Mask="[событие %3] Данные в %1 колонке %2 строке остались без изменения"
link(onFString,13421160:doWork2,[])
link(Str1,5725187:getVar,[])
link(Str2,12280975:getVar,[])
AddHint(-92,-80,199,26,Mask)
}
Add(LineBreakEx,11450873,896,469)
{
Caption="col"
Type=2
}
Add(LineBreakEx,7881424,903,483)
{
Caption="row"
Type=2
}
Add(FormatStr,3558215,896,511)
{
DataCount=3
Mask="[событие %3] Данные в %1 колонке %2 строке поменялись!!!"
link(onFString,13421160:doWork3,[(949,517)])
link(Str1,11450873:getVar,[])
link(Str2,7881424:getVar,[])
AddHint(-83,66,199,26,Mask)
}
Add(MathParse,4332492,266,406)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,16568077:doCompare,[])
}
Add(HubEx,13421160,945,406)
{
link(onEvent,6997827:doAdd,[])
}
Add(ListBox,6997827,966,406)
{
Left=10
Top=430
Width=745
Height=105
AddType=1
}
Add(ChanelToIndex,13112036,581,308)
{
link(onIndex,13170480:doValue,[])
}
Add(IndexToChanel,9058072,623,357)
{
Count=1
Point(Index)
link(onEvent1,7922413:doEvent2,[(672,363)(672,458)(226,458)(226,405)])
link(Index,13170480:Value,[])
}
Add(Memory,13170480,623,308)
{
@Hint=#9:redaction|9:0 - start|8:1 - stop|
AddHint(51,-34,59,39,@Hint)
}
Add(InfoTip,10305296,476,91)
{
Info=#54:Это должно обрабатываться при doStop в MST_UseEditCtrl|0:|57:И если еще не закончено редактирование (было onEnterCell)|0:|33:Сделать onStop и после onEscCell |
Font=[MS Sans Serif,12,0,0,1]
Frame=2
HAlign=0
Width=288
Height=312
Margin=5
}
Add(Check,15319488,490,357)
{
Caption="doStop"
link(onEvent,9058072:doEvent,[])
}

Если начать редактирование (вывести доп. контрол) и потерять фокус (нажать Tab к примеру), то должно произойти onEscCell причем только один раз. Узнает об этом MST_UseEditCtrl сам или ему помочь сделав doStop уже не так важно. Пользователь может сам настроить какие контролы пошлют события об окончании редактирования (потеря фокуса, нажатая кнопка, выбранный пункт).

Еще заметил что хорошо бы перемещать ползунок и делать ячейку видимой по возможности. Можно увидеть начав редактирование столбца Описания. Ячейка в не зоне видимости, а размер ячейки выдается полностью.
карма: 11

0
Редактировалось 2 раз(а), последний 2024-12-06 14:31:21