Make(delphi)
ver(4.04 build 184)
Add(MainForm,2953706,315,210)
{
Position=1
}
Add(MT_MultiData,14203159,532,301)
{
Point(RemaindData)
link(onData2,8522642:doValue,[])
}
Add(Memory,2675351,315,308)
{
Default=String(11;12;13;14;15;16)
link(onData,839471:doMT,[])
}
Add(MT_String,839471,371,301)
{
link(onResult,9599153:doEvent,[])
}
Add(Button,4537399,371,210)
{
Left=218
Top=222
Width=63
Caption="Без хаба"
Data=Integer(0)
link(onClick,12233922:doWork1,[(415,216)(415,251)])
}
Add(Button,10252153,371,252)
{
Left=106
Top=222
Width=61
Caption="Через хаб"
Data=Integer(1)
link(onClick,12233922:doWork2,[])
}
Add(ChanelToIndex,12233922,427,245)
{
Point(Data)
link(onIndex,2675351:doClear,[(471,251)(471,290)(303,290)(303,321)])
}
Add(MT_IndexToChanel,9599153,427,301)
{
Point(Index)
link(onEvent1,14203159:doSeparateMT,[])
link(onEvent2,7469514:doEvent1,[(478,314)(478,363)])
link(Index,12233922:Data,[])
}
Add(MTStrTbl,8302891,616,210)
{
Left=94
Top=4
Width=202
Height=208
Name="MTStrTbl"
Columns=#1:1|1:2|1:3|1:4|1:5|1:6|
Scroll=1
ColumnWidth=33
}
Add(MST_RowAction,16662174,658,364)
{
MSTControl="MTStrTbl"
}
Add(MT_MultiMem,8522642,595,308)
{
Count=0
Point(Data)
link(onData,1616917:doWork1,[(641,314)])
link(Data,14203159:RemaindData,[(601,298)(576,298)(576,345)(538,345)])
}
Add(MT_MultiData,13181629,532,357)
{
Point(RemaindData)
}
Add(MT_MultiMem,13350649,532,413)
{
Count=0
Point(Data)
link(onData,1616917:doWork3,[(641,419)])
link(Data,13181629:RemaindData,[])
}
Add(Hub,7469514,497,357)
{
link(onEvent1,13181629:doSeparateMT,[])
link(onEvent2,13350649:doValue,[(521,370)(521,419)])
}
Add(HubEx,1616917,637,364)
{
link(onEvent,16662174:doRowAction,[])
}
Add(MST_Clear,11136145,553,210)
{
MSTControl="MTStrTbl"
}
Add(Button,12916751,490,210)
{
Left=148
Top=248
Width=103
Caption="Очистка таблицы"
Data=Integer(0)
link(onClick,11136145:doClear,[])
}
Этот топик читают: Гость
Ответов: 356
Рейтинг: 31
|
|||
После второго вызова doSeparateMT (в одном потоке - "Без хаба"), точка RemaindData выдаёт только одно звено оставшегося MT-потока.
|
|||
карма: 0 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
Комментарий к точке RemaindData писал(а): Оставшийся МТ-поток после разложенияИли после окончания последнего события onDataX ------------ Дoбавленo в 14.04: А одно звено, потому что в RemaindData копируется поток с указателем на следующее звено, однако память, на которую ссылается указатель, очищается в элементе MT_String, а значит будут запомнено только самое первое звено данных (все это видно из исходников компонентов и структуры TData) |
|||
карма: 10 |
| ||
Голосовали: | olDjeka |
Ответов: 356
Рейтинг: 31
|
|||
Assasin писал(а): Или после окончания последнего события onDataXКак понять "после окончания" ![]() [flood] Assasin писал(а): видно из исходниковТолько тем кто в них разбирается ![]() |
|||
карма: 0 |
|
Разработчик
Ответов: 26306
Рейтинг: 2146
|
|||
Тут надо еще учесть тот момент, что в случае без хаба, данных на RemaindData еще не существует при использовании события с самой последней точки (как в схеме)
|
|||
карма: 22 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
olDjeka писал(а): Как понять "после окончания"В твоем примере окончание происходит перед вызовом события onEvent2 на хабе (как раз запоминается поток в RemaindData, и ты можешь его считать) Или на бесхабовом варианте после добавления строки в таблицу [flood] olDjeka писал(а): Только тем кто в них разбирается![]() ------------ Дoбавленo в 14.25: Да, точно, nesco, забыл об этом упомянуть |
|||
карма: 10 |
|
Разработчик
Ответов: 26306
Рейтинг: 2146
|
|||
olDjeka, без хаба использовать RemaindData не рекомендуется, он и сделан специально для вертикального каскадирования, если надо пропустить N начальных данных, то надо использовать свойство From
|
|||
карма: 22 |
| ||
Голосовали: | olDjeka |
Ответов: 758
Рейтинг: 112
|
|||
карма: 1 |
| ||
файлы: 2 | code_18904.txt [241B] [147], code_18906.txt [109B] [149] |
Разработчик
Ответов: 26306
Рейтинг: 2146
|
|||
miver, для двух пропускаемых элементов прокатит, а если их 10-ть, или 20-ть, будешь гирлянду лепить
![]() |
|||
карма: 22 |
|
Ответов: 758
Рейтинг: 112
|
|||
nesco писал(а): miver, для двух пропускаемых элементов прокатит, а если их 10-ть, или 20-ть, будешь гирлянду лепить До трех пропусков пойдет, дальше -- невыгодно, по количеству применяемых компонентовЯ не утверждал обратное [offtop]Интересно, а если нужно скажем из цепочки в 50 элементов вытащить середину, скажем 10 элементов. Какое решение самое оптимальное ![]() |
|||
карма: 1 |
|
Разработчик
Ответов: 26306
Рейтинг: 2146
|
|||
miver писал(а): Интересно, а если нужно скажем из цепочки в 50 элементов вытащить середину, скажем 10 элементов. Какое решение самое оптимальноеКстати, я об этом только что подумал. Очень простого решения я тут не вижу. Напрашивается, что-то наподобие, компонента MT_Separate. Единственное, что ограничивает его использование, так это, крайне редкая, надобность его применения |
|||
карма: 22 |
|
Ответов: 758
Рейтинг: 112
|
|||
nesco писал(а): Кстати, я об этом только что подумал. Очень простого решения я тут не вижу. Напрашивается, что-то наподобие, компонента MT_Separate. Единственное, что ограничивает его использование, так это, крайне редкая, надобность его примененияОчень частая задача. По крайней мере, у меня ![]() Решаю ее пока что с помощью
|
|||
карма: 1 |
|
Разработчик
Ответов: 26306
Рейтинг: 2146
|
|||
На SVN доступен новый компонент -- MT_Part, который разбивает MT-поток на две части в любом месте цепи
|
|||
карма: 22 |
| ||
Голосовали: | miver, olDjeka, Ivann, CriDos, sla8a, filyaxxxcom |
12