Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26148
Рейтинг: 2126
#61: 2024-12-09 03:43:47 ЛС | профиль | цитата
Вот что получилось в альфа релизе

--- Добавлено в 2024-12-09 03:49:24

Кстати, я немного подкорректировал твою схему. Там убрал коррекцию размера, тк ее можно сейчас сделать в элементе. Добавил выход по ESC, тк внутренний код ESC не работает, те форма таблице тупо не посылает код ESC. И замкнул выход приемника координат на перерисвку панели, чтобы корректно отрабатывалось слежение за изменением размера таблицы. Таблицу для теста раздвинул на всю форму.
Схема

Add(MainForm,10809136,98,140)
{
Width=778
Height=582
Position=1
Point(onKeyDown)
link(onCreate,10041622:doEnum,[])
link(onKeyDown,3462281:doCase,[(172,167)(172,300)])
}
Add(MST_UseEditCtrl,5561109,357,294)
{
MSTControl="testTable"
link(onCellSize,12756869:doRect,[(396,300)(396,286)(585,286)(585,300)])
link(onEnterCell,5484721:doValue,[])
link(onEscCell,7922413:doEvent1,[(417,314)(417,433)])
}
Add(Memory,5484721,518,301)
{
Point(Data)
link(onData,15587215:doEvent1,[])
link(Data,5561109:Cell,[(524,292)(510,292)(510,334)(384,334)])
}
Add(Memory,10271330,301,266)
{
}
Add(If_else,16568077,511,441)
{
@Hint=#52:Проверка на разницу данных до редактирования и после|
link(onTrue,14792882:doString,[])
link(onFalse,3558215:doString,[(760,454)(760,552)])
link(Op1,10271330:Value,[(517,362)(307,362)])
link(Op2,5484721:Value,[])
}
Add(MTStrTbl,5133893,315,140)
{
Width=762
Height=543
Align=5
Font=[MS Sans Serif,12,0,0,1]
WinStyle=4
Name="testTable"
Columns=#4:№=40|9:Фильм=200|9:Год=60==2|11:Жанр=200==2|12:Описание=300|0:|
Grid=0
}
Add(StrList,15034837,168,98)
{
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,231,140)
{
link(onResult,2904434:doRowAction,[])
}
Add(ArrayEnum,10041622,182,154)
{
link(onItem,922736:doMTString,[])
link(Array,15034837:Array,[])
}
Add(MST_RowAction,2904434,273,140)
{
MSTControl="testTable"
}
Add(ChildPanelEx,12756869,616,294)
{
link(onChange,3117519:doEvent1,[(656,300)(656,227)(244,227)(244,272)])
link(onKillFocus,15319488:doWork,[])
link(Index,8653266:getVar,[])
}
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(onEvent5,2554451:doWork2,[])
link(Index,11075478:Var3,[(153,182)])
}
Add(MT_MultiData,13383753,329,70)
{
Count=4
Point(Data)
link(onData1,5130657:doLeft,[])
link(onData2,5130657:doTop,[])
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)
{
link(onData,7516697:doWork1,[(368,27)(368,62)(277,62)])
}
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,7516697:doWork2,[(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(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,[])
}
Add(HubEx,7516697,273,70)
{
link(onEvent,13383753:doSeparateMT,[])
}
END_SDK
Add(Hub,7922413,427,427)
{
link(onEvent1,12756869:doStop,[(596,433)(596,314)])
link(onEvent2,4332492:doCalc,[(459,440)(459,447)])
}
Add(Hub,3117519,266,266)
{
link(onEvent1,1993221:doWork2,[])
link(onEvent2,5561109:doSetData,[(291,279)(291,300)])
}
Add(HubEx,1993221,287,266)
{
link(onEvent,10271330:doValue,[])
}
Add(Hub,15587215,567,301)
{
link(onEvent1,12756869:doStart,[])
link(onEvent2,1993221:doWork1,[(592,314)(592,258)(291,258)])
}
Add(LineBreakEx,7209891,329,378)
{
Caption="col"
Type=3
link(_Data,5561109:SubItem,[(335,334)(370,334)])
}
Add(LineBreakEx,15433687,371,378)
{
Caption="row"
Type=3
link(_Data,5561109:Index,[])
}
Add(LineBreakEx,5725187,770,406)
{
Caption="col"
Type=2
}
Add(LineBreakEx,12280975,812,406)
{
Caption="row"
Type=2
}
Add(LineBreakEx,8653266,616,266)
{
Caption="col"
Type=2
}
Add(FormatStr,14792882,805,441)
{
DataCount=3
Mask="[событие %3] Данные в %1 колонке %2 строке остались без изменения"
link(onFString,13421160:doWork2,[])
link(Str1,5725187:getVar,[(811,432)(776,432)])
link(Str2,12280975:getVar,[])
AddHint(-92,-80,199,26,Mask)
}
Add(LineBreakEx,11450873,770,511)
{
Caption="col"
Type=2
}
Add(LineBreakEx,7881424,812,511)
{
Caption="row"
Type=2
}
Add(FormatStr,3558215,805,546)
{
DataCount=3
Mask="[событие %3] Данные в %1 колонке %2 строке поменялись!!!"
link(onFString,13421160:doWork3,[(858,552)])
link(Str1,11450873:getVar,[(811,537)(776,537)])
link(Str2,7881424:getVar,[])
AddHint(-71,51,199,26,Mask)
}
Add(MathParse,4332492,469,441)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,16568077:doCompare,[])
}
Add(HubEx,13421160,854,441)
{
link(onEvent,6997827:doAdd,[])
}
Add(ListBox,6997827,875,441)
{
Left=10
Top=430
Width=745
Height=105
AddType=1
}
Add(InfoTip,10305296,784,28)
{
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,672,301)
{
Caption="doStop"
link(onEvent,3346197:doWork1,[(732,307)(732,223)(235,223)])
}
Add(StyleXP,12602425,56,140)
{
}
Add(Case,3462281,182,294)
{
Value=Integer(27)
link(onTrue,3346197:doWork2,[])
}
Add(HubEx,3346197,231,301)
{
link(onEvent,5561109:doStop,[])
}


Редактировалось 3 раз(а), последний 2024-12-09 03:51:59
карма: 22

0
файлы: 1hiMST_UseEditCtrl_test.zip [14.1KB] [28]
Ответов: 2265
Рейтинг: 676
#62: 2024-12-09 12:14:52 ЛС | профиль | цитата
nesco писал(а):
Добавил выход по ESC, тк внутренний код ESC не работает, те форма таблице тупо не посылает код ESC
Так об этом и была речь про добавления doStop. Контрол имеет фокус он и заканчивает редактирование по Esc или по каким другим нужным пользователю настройкам:
Add(MainForm,10809136,161,126)
{
Width=778
Height=582
Position=1
Point(onKeyDown)
link(onCreate,10041622:doEnum,[])
}
Add(MST_UseEditCtrl,5561109,217,357)
{
MSTControl="testTable"
Point(doStop)
link(onCellSize,12756869:doRect,[(256,363)(256,349)(445,349)(445,363)])
link(onEnterCell,5484721:doValue,[])
link(onEscCell,7922413:doEvent1,[(277,377)(277,496)])
}
Add(Memory,5484721,378,364)
{
Point(Data)
link(onData,15587215:doEvent1,[])
link(Data,5561109:Cell,[(384,355)(370,355)(370,397)(244,397)])
}
Add(Memory,10271330,161,329)
{
}
Add(If_else,16568077,371,504)
{
@Hint=#52:Проверка на разницу данных до редактирования и после|
link(onTrue,14792882:doString,[])
link(onFalse,3558215:doString,[(503,517)(503,615)])
link(Op1,10271330:Value,[(377,425)(167,425)])
link(Op2,5484721:Value,[])
}
Add(MTStrTbl,5133893,350,126)
{
Width=762
Height=543
Align=5
Font=[MS Sans Serif,12,0,0,1]
WinStyle=4
Name="testTable"
Columns=#4:№=40|9:Фильм=200|9:Год=60==2|11:Жанр=200==2|12:Описание=300|0:|
Grid=0
}
Add(StrList,15034837,203,84)
{
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,266,126)
{
link(onResult,2904434:doRowAction,[])
}
Add(ArrayEnum,10041622,217,140)
{
link(onItem,922736:doMTString,[])
link(Array,15034837:Array,[])
}
Add(MST_RowAction,2904434,308,126)
{
MSTControl="testTable"
}
Add(ChildPanelEx,12756869,476,357)
{
link(onChange,3117519:doEvent1,[(516,363)(516,304)(118,304)(118,335)])
link(onKillFocus,15319488:doWork,[])
link(Index,8653266:getVar,[])
}
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(onEvent5,2554451:doWork2,[])
link(Index,11075478:Var3,[(153,182)])
}
Add(MT_MultiData,13383753,329,70)
{
Count=4
Point(Data)
link(onData1,5130657:doLeft,[])
link(onData2,5130657:doTop,[])
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,321)])
}
Add(MT_Memory,14215607,329,21)
{
link(onData,7516697:doWork1,[(368,27)(368,62)(277,62)])
}
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)
Point(onKeyUp)
link(onChange,6115875:doWork2,[])
link(onEnter,11308046:doWork2,[])
link(onKillFocus,7354813:doWork2,[])
link(onKeyUp,15995078: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)
Point(onKeyUp)
link(onChange,6115875:doWork3,[(723,482)])
link(onEnter,15760508:doWork2,[])
link(onKillFocus,15760508:doWork3,[(752,496)])
link(onKeyUp,15995078:doWork3,[(555,503)])
}
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,7516697:doWork2,[(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,719,203)
{
Angle=3
link(onEvent,14376481:onChange,[(723,27)])
}
Add(HubEx,6115875,719,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(ListBox,12973147,469,210)
{
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)
Point(onKeyUp)
link(onClick,2883110:doEvent1,[(513,223)(513,209)])
link(onKillFocus,5573420:doWork2,[])
link(onKeyUp,15995078:doWork1,[(555,237)])
}
Add(MathParse,6349023,476,315)
{
DataCount=1
MathStr="%1 * 22 "
link(onResult,4482135:doWork3,[(571,321)])
link(X1,12973147:Count,[])
}
Add(HubEx,4482135,567,91)
{
link(onEvent,5130657:doHeight,[])
}
Add(Hub,2883110,525,203)
{
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,748,210)
{
Angle=3
link(onEvent,14376481:onKillFocus,[(752,34)])
}
Add(HubEx,5573420,748,224)
{
Angle=3
link(onEvent,5785315:doWork3,[])
}
Add(HubEx,11308046,748,385)
{
Angle=3
link(onEvent,5573420:doWork3,[])
}
Add(HubEx,7354813,748,392)
{
Angle=3
link(onEvent,11308046:doWork3,[])
}
Add(HubEx,15760508,748,483)
{
Angle=3
link(onEvent,12733492:doWork3,[])
}
Add(HubEx,7516697,273,70)
{
link(onEvent,13383753:doSeparateMT,[])
}
Add(Case,3462281,623,399)
{
@Hint=#3:Esc|
Value=Integer(27)
link(onTrue,12733492:doWork2,[])
AddHint(-5,39,27,13,Value)
AddHint(-46,12,33,13,@Hint)
}
Add(HubEx,15995078,551,399)
{
link(onEvent,3462281:doCase,[])
}
Add(HubEx,12733492,748,406)
{
Angle=3
link(onEvent,7354813:doWork3,[])
}
END_SDK
Add(Hub,7922413,287,490)
{
link(onEvent1,12756869:doStop,[(456,496)(456,377)])
link(onEvent2,4332492:doCalc,[(319,503)(319,510)])
}
Add(Hub,3117519,126,329)
{
link(onEvent1,1993221:doWork2,[])
link(onEvent2,5561109:doSetData,[(151,342)(151,363)])
}
Add(HubEx,1993221,147,329)
{
link(onEvent,10271330:doValue,[])
}
Add(Hub,15587215,427,364)
{
link(onEvent1,12756869:doStart,[])
link(onEvent2,1993221:doWork1,[(452,377)(452,321)(151,321)])
}
Add(LineBreakEx,7209891,189,441)
{
Caption="col"
Type=3
link(_Data,5561109:SubItem,[(195,397)(230,397)])
}
Add(LineBreakEx,15433687,231,441)
{
Caption="row"
Type=3
link(_Data,5561109:Index,[])
}
Add(LineBreakEx,5725187,567,469)
{
Caption="col"
Type=2
}
Add(LineBreakEx,12280975,609,469)
{
Caption="row"
Type=2
}
Add(LineBreakEx,8653266,476,329)
{
Caption="col"
Type=2
}
Add(FormatStr,14792882,602,504)
{
DataCount=3
Mask="[событие %3] Данные в %1 колонке %2 строке остались без изменения"
link(onFString,13421160:doWork2,[])
link(Str1,5725187:getVar,[(608,495)(573,495)])
link(Str2,12280975:getVar,[])
AddHint(-92,-80,199,26,Mask)
}
Add(LineBreakEx,11450873,567,574)
{
Caption="col"
Type=2
}
Add(LineBreakEx,7881424,609,574)
{
Caption="row"
Type=2
}
Add(FormatStr,3558215,602,609)
{
DataCount=3
Mask="[событие %3] Данные в %1 колонке %2 строке поменялись!!!"
link(onFString,13421160:doWork3,[(655,615)])
link(Str1,11450873:getVar,[(608,600)(573,600)])
link(Str2,7881424:getVar,[])
AddHint(-71,51,199,26,Mask)
}
Add(MathParse,4332492,329,504)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,16568077:doCompare,[])
}
Add(HubEx,13421160,651,504)
{
link(onEvent,6997827:doAdd,[])
}
Add(ListBox,6997827,672,504)
{
Left=10
Top=430
Width=745
Height=105
AddType=1
}
Add(Check,15319488,532,364)
{
Caption="doStop"
link(onEvent,5561109:doStop,[(592,370)(592,292)(111,292)(111,370)])
}
Add(StyleXP,12602425,119,126)
{
}
Как вариант редактирования может быть выключено и по истечению времени или еще чему. doStop точно лишним не будет.

А такое добавить:
    WM_MOUSEWHEEL:
if CellRedaction then
begin
InitOnEvent(true);
end;
При редактировании если прокручивать колесиком над таблицей, то контрол почти двигается вместе с таблицей.

Сдвинуть таблицу чтоб вывести ячейку в видимую часть так и не получится?

Редактировалось 5 раз(а), последний 2024-12-09 12:21:41
карма: 11

0
Ответов: 2265
Рейтинг: 676
#63: 2024-12-09 15:17:21 ЛС | профиль | цитата
nesco, посмотри вот это: https://forum.hiasm.com/getfile/39695
Добавил массив индексов которые блокируют редактирование. Заблокирован № (0 индекс) и жанр (3 индекс) столбцы для редактирования.
При редактировании нажми Tab чтоб перейти к другой ячейке или Tab+Ctrl чтоб перейти к предыдущей. Не добавил еще чтоб блокировать при таком переходе, но думаю для понимания идеи будет понятно.
Если на doNext подать 1 то предыдущий, в противном случае следующий.

Редактировалось 1 раз(а), последний 2024-12-09 15:18:40
карма: 11

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#64: 2024-12-09 16:19:04 ЛС | профиль | цитата
sla8a писал(а):
Сдвинуть таблицу чтоб вывести ячейку в видимую часть так и не получится?

Я же вроде как привязал размер клиентского прямоугольника ячейки к видимой части таблицы. Или это к скроллингу относится?

Редактировалось 1 раз(а), последний 2024-12-09 16:20:19
карма: 22

0
Ответов: 2265
Рейтинг: 676
#65: 2024-12-09 16:40:52 ЛС | профиль | цитата
nesco, ох сложно мне даются объяснения. Ситуация:
1. Таблица отображается не полностью. Часть столбцов скрыто. У таблицы отображается горизонтальная полоса прокрутки.
2. Начинается редактирование ячейки которая отображается частично.
3. Сдвинуть таблицу по горизонтали так чтоб ячейка была полностью отображена.
4. Выдать координаты ячейки.

Посмотри последний мой архив, там переход от одной редактируемой ячейки к другой осуществляется с помощью кнопки Tab. Если большая таблица, то хорошо бы чтоб было "слежение" как по горизонтали, так и по вертикали.

Редактировалось 1 раз(а), последний 2024-12-09 16:43:44
карма: 11

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#66: 2024-12-09 22:25:07 ЛС | профиль | цитата
sla8a писал(а):
Если на doNext подать 1 то предыдущий, в противном случае следующий.

Это мне кажется несусветной мутью. Next должен быть следующим, и никак иначе. Для предыдущего есть Previous. Да и вообще похоже на то, что из компонента хотят сделать еще одного монстра. И если вводить следующий и предыдущий, тогда уж doNextCell и doPrevCell

Редактировалось 1 раз(а), последний 2024-12-09 22:26:45
карма: 22

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#67: 2024-12-10 00:26:18 ЛС | профиль | цитата
Ха! В твоей схеме работает очень интересно -- по мыши войти в редакцию нельзя, зато по Next заходит спокойно. Ладно, будем посмотреть.

Редактировалось 1 раз(а), последний 2024-12-10 00:28:01
карма: 22

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#68: 2024-12-10 02:18:00 ЛС | профиль | цитата
Я бы все же массив запрещенной редакции вывел за пределы элемента. А то с табуляторами получается полная лажа.
карма: 22

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#69: 2024-12-10 12:52:56 ЛС | профиль | цитата
sla8a писал(а):
Сдвинуть таблицу по горизонтали так чтоб ячейка была полностью отображена

А вот этого делать не стоит в компоненте. Я реализовал вывод точных размеров и положения видимой области ячейки, ее можно засветить. А остальное надо делать вне компонента, если тебе это будет нужно.
Да и вообще -- все нах лишнее из компонента. Оставляем в нем только необходимый минимум, но заставляем его работать корректно.
А то получается, что ввели точку doStop (согласен -- нужная точка), и тут понеслось, поехало -- doNext, массив отключенных ячеек, перемещение ячеек при скроллинге. Что еще? Зачем так перегружать компонент?

Редактировалось 4 раз(а), последний 2024-12-10 13:18:32
карма: 22

0
Ответов: 2265
Рейтинг: 676
#70: 2024-12-10 15:02:37 ЛС | профиль | цитата
nesco писал(а):
по мыши войти в редакцию нельзя, зато по Next заходит

sla8a писал(а):
Tab+Ctrl чтоб перейти к предыдущей. Не добавил еще чтоб блокировать при таком переходе, но думаю для понимания идеи будет понятно.

nesco писал(а):
Я бы все же массив запрещенной редакции вывел за пределы элемента. А то с табуляторами получается полная лажа.
Соглашусь, удалил это дело. Случай не частый, да и обычно только первую колонку надо блокировать с порядковыми номерами.
nesco писал(а):
ввели точку doStop (согласен -- нужная точка)
Ура!

Посмотри что внес: https://forum.hiasm.com/getfile/39697
-doNext и массив блокировки удалил.
-Добавил doSetCell который устанавливает для редактирования указанную ячейку (Row и Col или данные из потока). И делает видимой строку данной ячейки, но не столбец. Посмотри схему testBig:
1. Начать редактировать любую ячейку.
2. С помощью клавиш стрелок перемещать каретку и переходить между ячейками.
3. При переходе вверх и вниз редактируемая ячейка остается в области видимости таблицы.
4. При переходе вправо, редактируемая ячейка в не области видимости
Вот хоть подскажи куда копать чтоб исправить 4 пункт, сам попробую.

В схеме testSmall (оставил для тестирования) можно переходить между редактируемыми ячейками с помощь Tab вперед и Tab+Ctrl назад.

Редактировалось 3 раз(а), последний 2024-12-10 15:15:41
карма: 11

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#71: 2024-12-10 15:55:26 ЛС | профиль | цитата
sla8a писал(а):
4. При переходе вправо, редактируемая ячейка в не области видимости
Вот хоть подскажи куда копать чтоб исправить 4 пункт, сам попробую.

Я посмотрю, пока не знаю.
карма: 22

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#72: 2024-12-11 05:00:55 ЛС | профиль | цитата
Билат. Вроде что-то получается, но ты такое в схеме намутил, что там сам черт не разберется. Вроде по отдельности работает, а в совокупности -- шишь. Генерация твоих перемещений -- это нечто. Если мне удастся соорудить новую схему на твоем принципе, то дело сдвинется с места. Но зато я нашел один баг, которого без скроллинга не наблюдалось -- справа обрезку ячейки реализовали, а вот слева -- фиг, пришлось мутить привязку.
карма: 22

0
Ответов: 2265
Рейтинг: 676
#73: 2024-12-11 11:53:52 ЛС | профиль | цитата
nesco писал(а):
ты такое в схеме намутил, что там сам черт не разберется.
Наговариваешь ты на мою схему . Вот немного "причесал", да и вроде ничего лишнего нет, самый минимум чтоб протестировать:

Add(MainForm,10809136,112,231)
{
Width=664
Height=495
Position=1
Point(onKeyDown)
link(onCreate,951339:doFor,[])
}
Add(MTStrTbl,5133893,336,364)
{
Width=648
Height=456
Align=5
Font=[MS Sans Serif,12,0,0,1]
WinStyle=4
Name="testTable"
Columns=#4:№=40|12:Название=200|7:1=60==2|7:2=60==2|7:3=60==2|7:4=60==2|7:5=60==2|7:6=60==2|7:7=60==2|7:8=60==2|7:9=60==2|8:10=60==2|0:|0:|
Grid=0
}
Add(MST_RowAction,2904434,336,245)
{
MSTControl="testTable"
}
Add(ChildPanelEx,12756869,336,420)
{
}
BEGIN_SDK
Add(EditMultiEx,14376481,21,21)
{
Width=1504
Height=1145
}
Add(Panel,5130657,504,105)
{
Left=35
Top=105
Visible=1
BevelInner=0
Point(doLeft)
Point(doTop)
Point(doWidth)
Point(doHeight)
Point(doVisible)
}
Add(MT_MultiData,13383753,455,112)
{
Count=4
Point(Data)
link(onData1,5130657:doLeft,[])
link(onData2,5130657:doTop,[])
link(onData3,5130657:doWidth,[])
link(onData4,5130657:doHeight,[])
link(Data,14215607:Value,[])
}
Add(MT_Memory,14215607,455,63)
{
link(onData,7516697:doWork1,[(494,69)(494,104)(445,104)])
}
Add(Edit,11196193,518,266)
{
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)
Point(Position)
Point(onKeyDown)
link(onChange,12486967:doWork,[])
link(onEnter,7803514:doWork1,[(571,279)])
link(onKillFocus,7803514:doWork2,[])
link(onKeyDown,7337739:doCase,[(562,293)(562,372)(53,372)(53,1021)])
}
Add(Hub,5035439,441,273)
{
OutCount=4
link(onEvent1,11196193:doText2,[])
link(onEvent2,11196193:doBringToFront,[])
link(onEvent3,11196193:doSetFocus,[])
link(onEvent4,11308528:doWork2,[(462,300)(462,349)])
}
Add(ChanelToIndex,11308528,469,336)
{
link(onIndex,11196193:doVisible,[(509,342)(509,300)])
}
Add(Hub,7068085,399,259)
{
OutCount=3
link(onEvent1,7516697:doWork2,[(425,265)(425,118)])
link(onEvent2,5685364:doWork2,[(434,272)(434,160)])
link(onEvent3,5035439:doEvent1,[])
}
Add(ChanelToIndex,5685364,455,147)
{
link(onIndex,5130657:doVisible,[(495,153)(495,146)])
}
Add(HubEx,7516697,441,112)
{
link(onEvent,13383753:doSeparateMT,[])
}
Add(Case,3462281,126,406)
{
@Hint=#3:Esc|
Value=Integer(27)
link(onTrue,7803514:doWork3,[(571,419)])
AddHint(-2,33,27,13,Value)
AddHint(-5,-17,33,13,@Hint)
}
Add(If_else,8008798,357,259)
{
Type=5
Op2=Integer(0)
link(onTrue,7068085:doEvent1,[])
link(Op1,10856897:getVar,[])
AddHint(5,-35,21,13,Op2)
}
Add(LineBreakEx,10856897,357,210)
{
Caption="col"
Type=2
}
Add(MST_UseEditCtrl,5561109,189,252)
{
MSTControl="parent.testTable"
Point(doStop)
Point(doSetCell)
link(onCellSize,14215607:doValue,[(229,258)(229,69)])
link(onEnterCell,5484721:doValue,[])
link(onEscCell,7922413:doEvent1,[(245,272)(245,342)])
}
Add(Memory,5484721,259,259)
{
Point(Data)
link(onData,15587215:doEvent1,[])
link(Data,5561109:Cell,[(265,247)(236,247)(236,294)(216,294)])
}
Add(Memory,10271330,119,210)
{
}
Add(Hub,7922413,259,336)
{
link(onEvent1,11308528:doWork1,[])
link(onEvent2,5685364:doWork1,[(343,349)(343,153)])
}
Add(Hub,3117519,84,210)
{
link(onEvent1,1993221:doWork2,[])
link(onEvent2,5561109:doSetData,[(108,223)(108,258)])
}
Add(HubEx,1993221,105,210)
{
link(onEvent,10271330:doValue,[])
}
Add(Hub,15587215,301,259)
{
link(onEvent1,8008798:doCompare,[])
link(onEvent2,1993221:doWork1,[(325,272)(325,196)(109,196)])
}
Add(LineBreakEx,7209891,196,322)
{
Caption="col"
Type=3
link(_Data,5561109:SubItem,[])
}
Add(LineBreakEx,15433687,203,308)
{
Caption="row"
Type=3
link(_Data,5561109:Index,[])
}
Add(LineBreakEx,2852193,259,308)
{
Caption="old"
Type=3
link(_Data,5484721:Value,[])
}
Add(LineBreakEx,6778748,119,301)
{
Caption="new"
Type=3
link(_Data,10271330:Value,[])
}
Add(LineBreakEx,12486967,581,266)
{
Caption="new"
}
Add(LineBreakEx,2141901,35,210)
{
Caption="new"
Type=1
link(OnEvent,3117519:doEvent1,[])
}
Add(LineBreakEx,14837277,581,280)
{
Caption="stop"
}
Add(LineBreakEx,16428612,588,595)
{
Caption="row"
Type=2
}
Add(Math,6128596,280,616)
{
Op2=1
ResultType=0
link(onResult,7087823:doCompare,[])
link(Op1,2203475:getVar,[])
AddHint(6,-18,30,13,Op2)
}
Add(Math,16136747,280,784)
{
OpType=1
Op2=1
ResultType=0
link(onResult,1705546:doCompare,[])
link(Op1,15567663:getVar,[])
AddHint(8,-16,30,13,Op2)
}
Add(LineBreakEx,8411818,126,259)
{
Caption="stop"
Type=1
link(OnEvent,5561109:doStop,[])
}
Add(LineBreakEx,15968837,637,525)
{
Caption="set"
}
Add(LineBreakEx,10462352,126,280)
{
Caption="set"
Type=1
link(OnEvent,5561109:doSetCell,[(184,286)(184,272)])
}
Add(If_else,7087823,322,616)
{
link(onTrue,5862235:doOperation,[(376,622)(376,524)])
link(onFalse,7780230:doWork2,[])
link(Op2,11255982:Var1,[(335,600)])
}
Add(Math,5862235,399,518)
{
Op2=1
ResultType=0
link(onResult,5157168:doCompare,[])
link(Op1,12243952:getVar,[])
AddHint(7,-18,30,13,Op2)
}
Add(MT_Add,14809660,588,623)
{
InputMT=1
link(onAdd,8952771:doWork,[])
link(Data,16428612:getVar,[])
}
Add(LineBreakEx,2203475,280,581)
{
Caption="col"
Type=2
}
Add(MT_Add,3357127,546,525)
{
Data=Integer(1)
link(onAdd,15968837:doWork,[])
AddHint(2,-25,21,13,Data)
}
Add(LineBreakEx,12243952,399,483)
{
Caption="row"
Type=2
}
Add(If_else,5157168,455,518)
{
link(onTrue,6840563:doData,[])
link(onFalse,15082148:doWork2,[])
link(Op1,3977373:Count,[])
}
Add(MST_ArrayRows,3977373,448,434)
{
MSTControl="parent.testTable"
}
Add(DoData,6840563,497,518)
{
Data=Integer(0)
link(onEventData,15082148:doWork1,[(536,524)])
AddHint(3,-24,21,13,Data)
}
Add(HubEx,15082148,532,525)
{
link(onEvent,3357127:doAdd,[])
}
Add(LineBreakEx,15567663,280,749)
{
Caption="col"
Type=2
}
Add(If_else,1705546,329,784)
{
Op2=Integer(0)
link(onTrue,12186795:doOperation,[(369,790)(369,734)])
link(onFalse,7780230:doWork3,[(578,797)])
AddHint(2,-38,21,13,Op2)
}
Add(HubEx,7780230,574,623)
{
link(onEvent,14809660:doAdd,[])
}
Add(Math,12186795,385,728)
{
OpType=1
Op2=1
ResultType=0
link(onResult,14793019:doCompare,[])
link(Op1,2485019:getVar,[])
AddHint(7,-18,30,13,Op2)
}
Add(LineBreakEx,2485019,385,679)
{
Caption="row"
Type=2
}
Add(MT_Add,13700832,497,763)
{
link(onAdd,8248390:doWork,[])
link(Data,12189069:Var2,[])
}
Add(MST_ArrayCols,12019485,469,560)
{
MSTControl="parent.testTable"
}
Add(LineBreakEx,8952771,637,623)
{
Caption="set"
}
Add(LineBreakEx,8248390,637,763)
{
Caption="set"
}
Add(If_else,14793019,434,728)
{
Op2=Integer(-1)
link(onTrue,8551369:doAdd,[])
link(onFalse,13700832:doAdd,[(478,741)(478,769)])
AddHint(-1,-31,24,13,Op2)
}
Add(MT_AddData,8551369,532,728)
{
link(onAdd,7100305:doWork,[])
link(Data1,3977373:EndIdx,[(538,478)(468,478)])
link(Data2,12189069:Var3,[(545,691)])
}
Add(LineBreakEx,7100305,637,728)
{
Caption="set"
}
Add(GetDataEx,12189069,497,686)
{
link(Data,4670745:reCalc,[])
}
Add(Case,7337739,119,1015)
{
@Hint=#4:Down|
Value=Integer(40)
link(onNextCase,12648963:doCase,[(170,1021)(170,997)(107,997)(107,916)])
link(onTrue,5103279:doOperation,[])
AddHint(-4,31,27,13,Value)
AddHint(-10,-15,43,13,@Hint)
}
Add(LineBreakEx,3701152,637,1029)
{
Caption="set"
}
Add(Math,5103279,210,1022)
{
Op2=1
ResultType=0
link(onResult,16059926:doCompare,[])
link(Op1,13902383:getVar,[])
AddHint(7,-18,30,13,Op2)
}
Add(LineBreakEx,13902383,210,987)
{
Caption="row"
Type=2
}
Add(MT_Add,7061316,406,1029)
{
link(onAdd,2155515:doWork2,[])
link(Data,13867667:getVar,[])
}
Add(LineBreakEx,13867667,406,987)
{
Caption="col"
Type=2
}
Add(Math,4894153,210,917)
{
OpType=1
Op2=1
ResultType=0
link(onResult,5064923:doCompare,[])
link(Op1,6938679:getVar,[])
AddHint(7,-18,30,13,Op2)
}
Add(LineBreakEx,6938679,210,882)
{
Caption="row"
Type=2
}
Add(Case,12648963,119,910)
{
@Hint=#2:Up|
Value=Integer(38)
link(onNextCase,16072013:doCase,[(191,916)(191,871)(105,871)(105,783)])
link(onTrue,4894153:doOperation,[])
AddHint(0,32,27,13,Value)
AddHint(1,-18,29,13,@Hint)
}
Add(If_else,16059926,294,1022)
{
link(onTrue,16559844:doData,[(334,1028)(334,1000)])
link(onFalse,2486583:doWork2,[])
link(Op2,5796118:Var1,[(307,894)])
}
Add(MST_ArrayRows,11080102,392,833)
{
MSTControl="parent.testTable"
}
Add(If_else,5064923,266,917)
{
Op2=Integer(-1)
link(onTrue,9086936:doAdd,[])
link(onFalse,4376003:doWork1,[(389,930)])
AddHint(-1,-31,24,13,Op2)
}
Add(MT_AddData,9086936,406,917)
{
link(onAdd,2155515:doWork1,[(452,923)])
link(Data1,5796118:Var2,[])
link(Data2,2935184:getVar,[])
}
Add(LineBreakEx,2935184,413,875)
{
Caption="col"
Type=2
}
Add(HubEx,2155515,448,1029)
{
link(onEvent,3701152:doWork,[])
}
Add(HubEx,2486583,385,1029)
{
link(onEvent,7061316:doAdd,[])
}
Add(GetDataEx,5796118,406,889)
{
link(Data,11080102:EndIdx,[])
}
Add(DoData,16559844,343,994)
{
Data=Integer(0)
link(onEventData,4376003:doWork2,[])
AddHint(4,-21,21,13,Data)
}
Add(LineBreakEx,12083572,525,322)
{
Caption="pos"
Type=3
link(_Data,11196193:Position,[])
}
Add(LineBreakEx,14205621,518,336)
{
Caption="txt"
Type=3
link(_Data,11196193:Text,[])
}
Add(LineBreakEx,3403585,203,742)
{
Caption="pos"
Type=2
}
Add(Case,16072013,119,777)
{
@Hint=#4:Left|
Value=Integer(37)
link(onNextCase,15224258:doCase,[(184,783)(184,711)(104,711)(104,615)])
link(onTrue,10633261:doCompare,[])
AddHint(-6,30,27,13,Value)
AddHint(-8,-19,33,13,@Hint)
}
Add(If_else,10633261,203,784)
{
Op2=Integer(0)
link(onTrue,16136747:doOperation,[])
link(Op1,3403585:getVar,[])
AddHint(8,-23,21,13,Op2)
}
Add(Case,15224258,119,609)
{
@Hint=#5:Right|
Value=Integer(39)
link(onNextCase,3462281:doCase,[(169,615)(169,524)(102,524)(102,412)])
link(onTrue,3739783:doLength,[])
AddHint(-6,33,27,13,Value)
AddHint(-15,-18,40,13,@Hint)
}
Add(LineBreakEx,16145838,238,581)
{
Caption="pos"
Type=2
}
Add(If_else,16628064,238,616)
{
link(onTrue,6128596:doOperation,[])
link(Op1,16145838:getVar,[])
}
Add(LineBreakEx,12718142,196,581)
{
Caption="txt"
Type=2
}
Add(Length,3739783,196,616)
{
link(onLength,16628064:doCompare,[])
link(Str,12718142:getVar,[])
}
Add(MathParse,4670745,490,637)
{
DataCount=1
MathStr="%1 - 1"
Point(reCalc)
link(X1,11255982:Var2,[])
}
Add(GetDataEx,11255982,490,595)
{
link(Data,12019485:EndIdxCol,[])
}
Add(HubEx,4376003,385,994)
{
Angle=1
link(onEvent,2486583:doWork1,[])
}
Add(HubEx,7803514,567,280)
{
link(onEvent,14837277:doWork,[])
}
END_SDK
Add(StyleXP,12602425,70,231)
{
}
Add(For,951339,161,245)
{
Start=1
End=100
link(onEvent,12653516:doEvent1,[])
}
Add(Hub,12653516,203,245)
{
OutCount=3
link(onEvent1,16325440:doFor,[(229,251)(229,111)])
link(onEvent2,15109729:doString,[])
link(onEvent3,2403286:doClear,[(238,265)(238,153)])
}
Add(Convertor,931224,336,105)
{
Mode=6
link(onResult,2403286:doStrCatDlm,[(376,111)(376,146)])
}
Add(Random,2204022,294,105)
{
Min=1000
Max=3000
link(onRandom,931224:doConvert,[])
}
Add(For,16325440,245,105)
{
End=9
link(onEvent,2204022:doRandom,[])
}
Add(StrCatDelim,2403286,392,140)
{
Delimiter=";"
Point(doClear)
link(Str1,6556000:Var1,[(398,128)(386,128)(386,184)])
}
Add(MT_String,10205746,294,245)
{
link(onResult,2904434:doRowAction,[])
}
Add(FormatStr,15109729,252,252)
{
Mask="%1;Название %1%2"
link(onFString,10205746:doMT,[])
link(Str2,6556000:Var2,[(265,220)(398,220)])
}
Add(GetDataEx,6556000,392,179)
{
link(Data,2403286:Result,[])
}
И вот еще одна схема демонстрирующая полезность doStop,doSetCell, да и сдвига если ячейка будет в не зоне видимости. Схема указывает найденную ячейку с помощью стороннего контрола:

Add(MainForm,10809136,210,105)
{
Width=776
Height=572
Position=1
Point(onKeyDown)
link(onCreate,10041622:doEnum,[])
}
Add(MTStrTbl,5133893,399,105)
{
Top=60
Width=762
Height=483
Font=[MS Sans Serif,12,0,0,1]
WinStyle=4
Name="testTable"
Columns=#4:№=40|9:Фильм=200|9:Год=60==2|11:Жанр=200==2|12:Описание=300|0:|
Grid=0
}
Add(StrList,15034837,252,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,315,105)
{
link(onResult,2904434:doRowAction,[])
}
Add(ArrayEnum,10041622,266,119)
{
link(onItem,922736:doMTString,[])
link(Array,15034837:Array,[])
}
Add(MST_RowAction,2904434,357,105)
{
MSTControl="testTable"
}
Add(StyleXP,12602425,168,105)
{
}
Add(MST_UseEditCtrl,5561109,280,336)
{
MSTControl="testTable"
Point(doSetCell)
Point(doStop)
link(onCellSize,2625445:doEvent1,[(316,342)(316,286)])
link(onEnterCell,13383753:doSeparateMT,[])
link(onEscCell,848161:doReset,[(316,356)(316,405)])
}
Add(MST_FindText,674873,161,343)
{
SelectFind=1
MSTControl="testTable"
link(onFindText,6923005:doEvent1,[])
link(FindText,8759677:Text,[])
}
Add(Edit,8759677,161,294)
{
Left=15
Top=20
Width=120
Height=25
Font=[MS Sans Serif,12,0,0,1]
Text="1999"
}
Add(Button,3196375,119,343)
{
Left=150
Top=20
Height=25
Caption="Найти"
link(onClick,674873:doFindText,[])
}
Add(MT_MultiData,13383753,350,343)
{
Count=4
Point(Data)
link(onData1,6094652:doLeft,[])
link(onData2,6094652:doTop,[])
link(onData3,6094652:doWidth,[])
link(onData4,6094652:doHeight,[])
link(Data,14215607:Value,[])
}
Add(MT_Memory,14215607,350,287)
{
link(onData,3270517:doCalc,[])
}
Add(Label,6094652,504,336)
{
Left=580
Top=430
Color=255
Font=[MS Sans Serif,12,1,255,1]
Visible=1
Caption=""
AutoSize=1
Alignment=2
Point(doLeft)
Point(doTop)
Point(doWidth)
Point(doHeight)
Point(doVisible)
Point(Handle)
}
Add(Hub,6923005,203,343)
{
link(onEvent1,5561109:doSetCell,[])
link(onEvent2,10930565:doTimer,[])
}
Add(Timer,10930565,231,350)
{
Interval=100
Enable=1
AutoStop=20
Point(onStop)
link(onTimer,848161:doNext,[(271,356)(271,398)])
link(onStop,5561109:doStop,[(275,363)(275,356)])
}
Add(CounterEx,848161,350,392)
{
Max=1
Point(doReset)
link(onNext,6094652:doVisible,[(452,398)(452,377)])
}
Add(RGN_SetToWindow,16359307,511,434)
{
link(Handle,6094652:Handle,[])
}
Add(RGN_Rect,10887976,385,434)
{
link(onCreateRect,13710157:doCreateRect,[])
link(Point2,3270517:Result,[])
}
Add(RGN_Rect,13710157,427,434)
{
Point1=196611
link(onCreateRect,11305299:doCombine,[])
link(Point2,3932225:Result,[])
}
Add(RGN_Combine,11305299,469,434)
{
Mode=3
link(onCombine,16359307:doSetRegion,[])
link(Region1,10887976:Result,[(475,422)(464,422)(464,474)(391,474)])
}
Add(MathParse,3932225,434,287)
{
DataCount=1
MathStr="%1 - 65536 * 3 - 3"
link(onResult,6282430:doData,[(553,293)(553,490)(332,490)(332,440)])
}
Add(MathParse,3270517,392,287)
{
MathStr="%2 * 65536 + %1"
link(onResult,3932225:doCalc,[])
link(X1,15008401:Value1,[])
link(X2,15008401:Value2,[])
}
Add(DoData,6282430,343,434)
{
link(onEventData,10887976:doCreateRect,[])
}
Add(Hub,2625445,322,280)
{
link(onEvent1,15008401:doValue,[(346,286)(346,223)])
link(onEvent2,14215607:doValue,[])
}
Add(MT_MultiMem,15008401,392,217)
{
From=2
}
карма: 11

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#74: 2024-12-11 14:26:51 ЛС | профиль | цитата
Пока особенно не мути ничего. Есть одна задумка. Хорошо, если удастся реализовать. Там вообще лишних телодвижений делать не придется.
карма: 22

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#75: 2024-12-12 18:21:05 ЛС | профиль | цитата
Вот ты мне задал задачу. Давно у меня не было такого мозгового штурма. Сейчас пока работа идет над созданием универсального метода MakeVisible, который позволит отображать любую ячейку в пределах видимости при ее выборе по запросу, те будет задействован вертикально-горизонтальный скроллинг. Дело пока двигается, но муравьиными шагами.

Редактировалось 3 раз(а), последний 2024-12-12 18:25:14
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)