Вверх ↑
Этот топик читают: Гость
Ответов: 207
Рейтинг: 14
#1: 2020-11-27 17:28:02 ЛС | профиль | цитата
Есть файл около 50000 строк, стоит задача загрузить эти данные как можно быстрее в таблицу MTStrTbl.
Все тесты проводил на стареньком ноутбуке.

Схема 1 (31 секунда)

Add(MainForm,3063237,161,112)
{
Width=407
Height=675
link(onCreate,3918577:doFor,[(277,132)(277,202)])
}
Add(StrList,4383086,371,196)
{
}
Add(ArrayEnum,1976442,385,266)
{
link(onItem,16356153:doMT,[])
link(onEndEnum,4517168:doStop,[(424,279)(424,307)(298,307)(298,279)])
link(Array,4383086:Array,[])
}
Add(MST_RowAction,15395190,497,259)
{
MSTControl="MTStrTbl"
}
Add(MT_String,16356153,448,259)
{
link(onResult,15395190:doRowAction,[])
}
Add(Button,7099200,189,266)
{
Left=30
Top=10
link(onClick,4517168:doStart,[])
}
Add(TimeCounter,4517168,308,266)
{
link(onStart,1976442:doEnum,[])
link(onStop,3063237:doCaption,[(347,279)(347,258)(151,258)(151,118)])
}
Add(MTStrTbl,15043066,553,259)
{
Top=35
Width=390
Height=585
Color=15792119
Font=[Century Gothic,10,0,0,204]
KeyPreview=1
Ctl3D=1
WinStyle=1
Name="MTStrTbl"
Columns=#1:1|
FlatScroll=1
ColumnWidth=100
RowSelect=1
TextAlign=2
Style=4
Grid=0
InfoTip=1
EnableOnClick=1
ChangeWidth=1
SmallIconsManager="icons"
DrawManager="draw"
Point(doVisible)
Point(doBringToFront)
}
Add(For,3918577,287,196)
{
End=50000
link(onEvent,4383086:doAdd,[])
}
Схема 2 с параллельным потоком (83 секунды)

Add(MainForm,3063237,161,112)
{
Width=407
Height=675
link(onCreate,3918577:doFor,[(277,132)(277,202)])
}
Add(StrList,4383086,371,196)
{
}
Add(ArrayEnum,1976442,385,266)
{
link(onItem,16356153:doMT,[])
link(onEndEnum,4517168:doStop,[(424,279)(424,307)(298,307)(298,279)])
link(Array,4383086:Array,[])
}
Add(MST_RowAction,15395190,497,259)
{
MSTControl="MTStrTbl"
}
Add(MT_String,16356153,448,259)
{
link(onResult,15395190:doRowAction,[])
}
Add(Button,7099200,154,266)
{
Left=30
Top=10
link(onClick,2817889:doStart,[])
}
Add(TimeCounter,4517168,308,266)
{
link(onStart,1976442:doEnum,[])
link(onStop,3063237:doCaption,[(347,279)(347,258)(151,258)(151,118)])
}
Add(MTStrTbl,15043066,553,259)
{
Top=35
Width=390
Height=585
Color=15792119
Font=[Century Gothic,10,0,0,204]
KeyPreview=1
Ctl3D=1
WinStyle=1
Name="MTStrTbl"
Columns=#1:1|
FlatScroll=1
ColumnWidth=100
RowSelect=1
TextAlign=2
Style=4
Grid=0
InfoTip=1
EnableOnClick=1
ChangeWidth=1
SmallIconsManager="icons"
DrawManager="draw"
Point(doVisible)
Point(doBringToFront)
}
Add(For,3918577,287,196)
{
End=50000
link(onEvent,4383086:doAdd,[])
}
Add(Thread,2817889,231,266)
{
Delay=0
FastStop=0
link(onExec,4517168:doStart,[])
}
Схема 3 (4.5 секунды)

Add(MainForm,3063237,175,91)
{
Width=407
Height=675
link(onCreate,3918577:doFor,[(291,111)(291,181)])
}
Add(StrList,4383086,385,175)
{
}
Add(ArrayEnum,1976442,399,245)
{
link(onItem,16356153:doMT,[])
link(onEndEnum,10854386:doEvent1,[])
link(Array,4383086:Array,[])
}
Add(MST_RowAction,15395190,637,238)
{
MSTControl="MTStrTbl"
}
Add(MT_String,16356153,588,238)
{
link(onResult,15395190:doRowAction,[])
}
Add(Button,7099200,196,245)
{
Left=30
Top=10
link(onClick,4517168:doStart,[])
}
Add(TimeCounter,4517168,322,245)
{
link(onStart,1976442:doEnum,[])
link(onStop,3063237:doCaption,[(361,258)(361,237)(165,237)(165,97)])
}
Add(Hub,10854386,469,252)
{
link(onEvent1,4517168:doStop,[(494,258)(494,286)(277,286)(277,258)])
link(onEvent2,11957557:doData,[])
}
Add(MTStrTbl,13446720,637,301)
{
Top=35
Width=390
Height=585
Color=15792119
Font=[Century Gothic,10,0,0,204]
WinStyle=1
Columns=#1:1|
ColumnWidth=100
ColorItems=0
RowSelect=1
Style=4
Grid=0
MultiSelect=0
Point(doVisible)
}
Add(Hub,9132122,581,357)
{
link(onEvent1,15043066:doVisible,[])
link(onEvent2,15043066:doBringToFront,[])
}
Add(DoData,11957557,525,259)
{
Data=Integer(1)
link(onEventData,9132122:doEvent1,[(571,265)(571,363)])
}
Add(MTStrTbl,15043066,637,350)
{
Top=35
Width=390
Height=585
Color=15792119
Font=[Century Gothic,10,0,0,204]
Visible=1
KeyPreview=1
Ctl3D=1
WinStyle=1
Name="MTStrTbl"
Columns=#1:1|
FlatScroll=1
ColumnWidth=100
RowSelect=1
TextAlign=2
Style=4
Grid=0
InfoTip=1
EnableOnClick=1
ChangeWidth=1
SmallIconsManager="icons"
DrawManager="draw"
Point(doVisible)
Point(doBringToFront)
}
Add(For,3918577,301,175)
{
End=50000
link(onEvent,4383086:doAdd,[])
}
Схема 4 с параллельным потоком (13.6 секунд)

Add(MainForm,3063237,175,91)
{
Width=407
Height=675
link(onCreate,3918577:doFor,[(291,111)(291,181)])
}
Add(StrList,4383086,385,175)
{
}
Add(ArrayEnum,1976442,399,245)
{
link(onItem,16356153:doMT,[])
link(onEndEnum,10854386:doEvent1,[])
link(Array,4383086:Array,[])
}
Add(MST_RowAction,15395190,637,238)
{
MSTControl="MTStrTbl"
}
Add(MT_String,16356153,588,238)
{
link(onResult,15395190:doRowAction,[])
}
Add(Button,7099200,154,245)
{
Left=30
Top=10
link(onClick,10870963:doStart,[])
}
Add(TimeCounter,4517168,322,245)
{
link(onStart,1976442:doEnum,[])
link(onStop,3063237:doCaption,[(361,258)(361,237)(165,237)(165,97)])
}
Add(Hub,10854386,469,252)
{
link(onEvent1,4517168:doStop,[(494,258)(494,286)(277,286)(277,258)])
link(onEvent2,11957557:doData,[])
}
Add(MTStrTbl,13446720,637,301)
{
Top=35
Width=390
Height=585
Color=15792119
Font=[Century Gothic,10,0,0,204]
WinStyle=1
Columns=#1:1|
ColumnWidth=100
ColorItems=0
RowSelect=1
Style=4
Grid=0
MultiSelect=0
Point(doVisible)
}
Add(Hub,9132122,581,357)
{
link(onEvent1,15043066:doVisible,[])
link(onEvent2,15043066:doBringToFront,[])
}
Add(DoData,11957557,525,259)
{
Data=Integer(1)
link(onEventData,9132122:doEvent1,[(571,265)(571,363)])
}
Add(MTStrTbl,15043066,637,350)
{
Top=35
Width=390
Height=585
Color=15792119
Font=[Century Gothic,10,0,0,204]
Visible=1
KeyPreview=1
Ctl3D=1
WinStyle=1
Name="MTStrTbl"
Columns=#1:1|
FlatScroll=1
ColumnWidth=100
RowSelect=1
TextAlign=2
Style=4
Grid=0
InfoTip=1
EnableOnClick=1
ChangeWidth=1
SmallIconsManager="icons"
DrawManager="draw"
Point(doVisible)
Point(doBringToFront)
}
Add(For,3918577,301,175)
{
End=50000
link(onEvent,4383086:doAdd,[])
}
Add(Thread,10870963,224,245)
{
Delay=0
FastStop=0
link(onExec,4517168:doStart,[])
}

Почему в параллельном потоке увеличивается время в 2 - 3 раза? И есть ли способ быстрой загрузки данных в таблицу?
карма: 2

0
vip
#1.1контекстная реклама от партнеров
Ответов: 8888
Рейтинг: 823
#2: 2020-11-27 19:26:03 ЛС | профиль | цитата
Joiner, на циферках текст разве можно тренировать Вот с генератором (количество строк задаётся)
Генератор случайного текста


Add(MainForm,3063237,343,133)
{
Width=545
Height=675
link(onCreate,11085202:doWork1,[])
}
Add(StrList,4383086,483,133)
{
}
Add(ArrayEnum,1976442,497,203)
{
link(onItem,16356153:doMT,[])
link(onEndEnum,4517168:doStop,[(536,216)(536,244)(410,244)(410,216)])
link(Array,4383086:Array,[])
}
Add(MST_RowAction,15395190,609,196)
{
MSTControl="MTStrTbl"
}
Add(MT_String,16356153,560,196)
{
link(onResult,15395190:doRowAction,[])
}
Add(TimeCounter,4517168,420,203)
{
link(onStart,1976442:doEnum,[])
link(onStop,3063237:doCaption,[(459,216)(459,195)(333,195)(333,139)])
}
Add(MTStrTbl,15043066,665,196)
{
Top=35
Width=525
Height=585
Color=15792119
Font=[Century Gothic,10,0,0,204]
Ctl3D=1
WinStyle=1
Name="MTStrTbl"
Columns=#1:1|
FlatScroll=1
ColumnWidth=100
RowSelect=1
TextAlign=2
Style=4
Grid=0
InfoTip=1
EnableOnClick=1
SmallIconsManager="icons"
DrawManager="draw"
Point(doVisible)
Point(doBringToFront)
}
Add(ChildPanel,11085202,399,147)
{
link(onEvent2,6245019:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,7878121,21,21)
{
EventCount=2
WorkCount=1
Width=440
Height=270
link(doWork1,12297484:doEvent1,[(46,27)(46,97)])
}
Add(Panel,13137533,56,35)
{
Width=529
Height=30
Align=2
}
Add(Button,294400,42,126)
{
Left=15
Top=5
Caption="New"
link(onClick,12836985:doEvent1,[])
}
Add(Button,16443704,42,189)
{
Left=460
Top=5
Enabled=1
Caption="Save"
link(onClick,15140639:doEvent1,[])
}
Add(Edit,10340021,217,35)
{
Left=185
Top=5
Width=90
Text="20000"
DataType=2
}
Add(Label,13731098,168,35)
{
Left=125
Top=7
Width=61
Height=17
Caption="Кол. строк"
}
Add(Button,11871194,238,175)
{
Left=370
Top=5
Caption="View"
link(onClick,1896552:doData,[])
}
Add(LED,11063149,301,49)
{
Left=80
Top=5
Width=20
Height=20
ColorOff=65280
}
Add(Hub,12297484,91,91)
{
OutCount=4
link(onEvent1,3301899:doWork2,[(116,97)(116,83)])
link(onEvent2,3210884:doWork1,[])
link(onEvent3,3789266:doWork1,[(116,111)])
link(onEvent4,14611930:doWork2,[])
}
Add(MultiElement,3210884,217,98)
{
link(onEvent1,2339098:doAdd,[])
link(onEvent2,343437:doEvent1,[])
link(Data1,13711752:Var2,[])
}
BEGIN_SDK
Add(EditMulti,90280,28,21)
{
EventCount=2
WorkCount=2
DataCount=1
Width=440
Height=158
VOffset=7
HOffset=28
link(doWork1,15240120:doEvent1,[])
link(doWork2,15286128:doFor,[(39,41)(39,55)])
}
Add(For,15286128,49,49)
{
@Hint=#18:Количество абзацев|
IncludeEnd=1
link(onEvent,9486001:doRandom,[])
link(onStop,90280:onEvent2,[(88,62)(88,140)(455,140)(455,41)])
link(End,90280:Data1,[])
}
Add(For,11842154,154,49)
{
@Hint=#29:Количество слов в предложении|
link(onEvent,5410569:doText,[])
link(onStop,15892992:doEvent1,[(193,62)(193,97)])
link(End,9486001:Random,[(167,40)(146,40)(146,89)(111,89)])
}
Add(Random,9486001,105,49)
{
Min=7
Max=15
link(onRandom,11842154:doFor,[])
}
Add(InlineCode,5410569,203,42)
{
WorkPoints=#7:doStart|6:doText|
EventPoints=#5:onRes|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|23: onRes : THI_Event;|5: |52: procedure doStart(var _Data:TData; Index:Word); |50: procedure doText(var _Data:TData; Index:Word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doStart;|6: begin|12: Randomize;|5: end;|0:|29:procedure THiAsmClass.doText;|15:var sss:string;|16: i,j:integer;|16: _Rnd:double;|5:BEGIN|11: sss:=' ';|24: j:=round(Random*12)+2;|19: for i:=0 to j do|9: begin|18: _Rnd:=Random;|42: if _Rnd<0.0003 then sss:=sss+'ё' else|42: if _Rnd<0.0007 then sss:=sss+'ъ' else|42: if _Rnd<0.0033 then sss:=sss+'ф' else|42: if _Rnd<0.0065 then sss:=sss+'э' else|42: if _Rnd<0.0101 then sss:=sss+'щ' else|42: if _Rnd<0.0149 then sss:=sss+'ц' else|42: if _Rnd<0.0213 then sss:=sss+'ю' else|42: if _Rnd<0.0286 then sss:=sss+'ш' else|41: if _Rnd<0.038 then sss:=sss+'ж' else|42: if _Rnd<0.0477 then sss:=sss+'х' else|42: if _Rnd<0.0598 then sss:=sss+'й' else|42: if _Rnd<0.0742 then sss:=sss+'ч' else|42: if _Rnd<0.0901 then sss:=sss+'б' else|42: if _Rnd<0.1066 then sss:=sss+'з' else|42: if _Rnd<0.1236 then sss:=sss+'г' else|41: if _Rnd<0.141 then sss:=sss+'ь' else|40: if _Rnd<0.16 then sss:=sss+'ы' else|42: if _Rnd<0.1801 then sss:=sss+'я' else|42: if _Rnd<0.2063 then sss:=sss+'у' else|42: if _Rnd<0.2344 then sss:=sss+'п' else|42: if _Rnd<0.2642 then sss:=sss+'д' else|42: if _Rnd<0.2963 then sss:=sss+'м' else|42: if _Rnd<0.3312 then sss:=sss+'к' else|42: if _Rnd<0.3752 then sss:=sss+'л' else|42: if _Rnd<0.4206 then sss:=sss+'в' else|42: if _Rnd<0.4679 then sss:=sss+'р' else|42: if _Rnd<0.5226 then sss:=sss+'с' else|42: if _Rnd<0.5852 then sss:=sss+'т' else|42: if _Rnd<0.6522 then sss:=sss+'н' else|42: if _Rnd<0.7257 then sss:=sss+'и' else|42: if _Rnd<0.8058 then sss:=sss+'а' else|42: if _Rnd<0.8903 then sss:=sss+'е' else|34: if _Rnd<1 then sss:=sss+'о'; |9: end;|25: _hi_onEvent(onRes,sss);|4:END;|0:|0:|4:end.|
link(onRes,15879034:doWork2,[])
}
Add(StrCat,13455235,308,42)
{
Point(doClear)
link(Str1,7063167:Var3,[(314,33)(328,33)(328,82)])
}
Add(Hub,15240120,70,28)
{
link(onEvent1,5410569:doStart,[(193,34)(193,48)])
link(onEvent2,9486001:doRandomize,[(95,41)(95,62)])
}
Add(DoData,7170534,308,98)
{
link(onEventData,16600547:doTrim,[])
link(Data,7063167:Var2,[])
}
Add(GetDataEx,7063167,308,77)
{
link(Data,13455235:Result,[])
}
Add(Hub,15892992,203,91)
{
OutCount=3
link(onEvent1,7526937:doData,[(242,97)(242,62)])
link(onEvent2,7170534:doData,[])
link(onEvent3,13455235:doClear,[(298,111)(298,55)])
}
Add(DoData,7526937,252,56)
{
Data=String(. )
link(onEventData,15879034:doWork3,[(291,62)])
}
Add(HubEx,15879034,287,42)
{
link(onEvent,13455235:doStrCat,[])
}
Add(StrCase,14266070,406,98)
{
Type=3
link(onModify,90280:onEvent1,[(445,104)(445,34)])
}
Add(Trim,16600547,357,98)
{
Char=" "
Mode=4
link(onTrim,14266070:doModify,[])
}
END_SDK
Add(Hub,12836985,91,126)
{
OutCount=3
link(onEvent1,3301899:doWork3,[(123,132)])
link(onEvent2,3789266:doWork2,[])
link(onEvent3,14611930:doWork3,[(130,146)])
}
Add(HubEx,3301899,119,77)
{
link(onEvent,16463242:doEvent1,[])
}
Add(StrList,2339098,301,98)
{
}
Add(DoData,1896552,301,175)
{
link(onEventData,7878121:onEvent2,[(360,181)(360,34)])
link(Data,633127:Var2,[])
}
Add(SDialog,3850500,217,133)
{
Filter="TXT|*.txt"
Point(doFileName)
link(onExecute,2339098:doSave,[])
}
Add(TimeCounter,526452,350,217)
{
link(onStop,10660108:doString,[])
}
Add(Length,4653976,294,224)
{
link(onLength,526452:doStop,[])
link(Str,633127:Var1,[(300,166)])
}
Add(FormatStr,10660108,399,224)
{
DataCount=3
Mask="Сгенерировано %1 символов в %3 строках за %2 мсек"
link(onFString,7878121:onEvent1,[(443,230)(443,27)])
link(Str1,4653976:Result,[(405,215)(391,215)(391,264)(300,264)])
link(Str3,2339098:Count,[(419,159)(314,159)])
}
Add(GetDataEx,633127,301,161)
{
link(Data,2339098:Text,[])
}
Add(HubEx,3789266,112,133)
{
Angle=1
link(onEvent,526452:doStart,[(116,223)])
}
Add(HubEx,14611930,126,112)
{
Angle=3
link(onEvent,3646847:doStart,[(130,111)])
}
Add(Hub,16463242,238,77)
{
link(onEvent1,11063149:doOn,[(291,83)(291,69)])
link(onEvent2,2339098:doClear,[(291,90)(291,111)])
}
Add(Hub,343437,259,105)
{
link(onEvent1,11063149:doOff,[(284,111)(284,62)])
link(onEvent2,4653976:doLength,[(284,118)(284,230)])
}
Add(Thread,3646847,161,105)
{
Delay=20
FastStop=0
link(onExec,3210884:doWork2,[])
}
Add(Hub,15140639,91,189)
{
link(onEvent1,7492483:doOperation,[])
link(onEvent2,3850500:doExecute,[(123,202)(123,181)(200,181)(200,139)])
}
Add(Math,7492483,133,189)
{
OpType=3
Op2=1000
ResultType=0
link(onResult,3543045:doStrCat,[])
link(Op1,13711752:Var1,[(139,75)])
}
Add(GetDataEx,13711752,217,70)
{
link(Data,10340021:Text,[])
}
Add(StrCat,3543045,175,189)
{
Str2="Кстр.txt"
link(onStrCat,3850500:doFileName,[(214,195)(214,181)(207,181)(207,146)])
}
END_SDK
Add(Hub,6245019,448,154)
{
link(onEvent1,4383086:doText,[])
link(onEvent2,4517168:doStart,[(473,167)(473,188)(410,188)(410,209)])
}

карма: 19

0
Ответов: 2200
Рейтинг: 673
#3: 2020-11-27 19:31:55 ЛС | профиль | цитата
Joiner, MTStrTbl это интерфейсный элемент, на него смотрит пользователь и видит, ну максимум пару десяток строк. И вот зачем вы в него пхаете 50000 строк?
карма: 11

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#4: 2020-11-27 20:33:00 ЛС | профиль | цитата
sla8a писал(а):
зачем вы в него пхаете 50000 строк?

Анекдот писал(а):
Купили как-то суровым сибирским лесорубам японскую бензопилу.

Собрались в кружок лесорубы, решили ее испытать. Завели, подсунули ей деревце.
— Вжик! — сказала японская пила.
— У, бля! — сказали лесорубы.

Подсунули ей деревце потолще.
— Вж-ж-жик! — сказала пила.
— У, бля! — сказали лесорубы.

Подсунули ей толстенный кедр.
— Вж-ж-ж-ж-ж-ж-ж-жик! — сказала пила.
— Ууух, бля! — сказали лесорубы.

Подсунули ей железный лом.
— КРЯК! — сказала пила.
— Ага, бля! — укоризненно сказали суровые сибирские лесорубы. И ушли рубить лес топорами.

карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 207
Рейтинг: 14
#5: 2020-11-28 00:58:15 ЛС | профиль | цитата
sla8a писал(а):
И вот зачем вы в него пхаете 50000 строк?

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

Nic, Не думал, что 50000 строк - это "лом". А 10000 - "толстенный кедр"

Хорошо, что разработчики OpenOffice и Excel не рассказывали друг другу такие анекдоты.
карма: 2

0
Ответов: 5227
Рейтинг: 588
#6: 2020-11-28 04:50:12 ЛС | профиль | цитата
Joiner, если бы на самом деле разработчики не травили анекдоты а задействовали (добавили) бы методы BeginUpdate & EndUpdate (в KOL они есть) то может быть таких вопросов и не возникало.

Практически во всех графических сетках это используется и для приличия имена этих методов никто не меняет.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#7: 2020-11-28 12:17:39 ЛС | профиль | цитата
andrestudio писал(а):
а задействовали (добавили) бы методы BeginUpdate & EndUpdate (в KOL они есть) то может быть таких вопросов и не возникало

Ага, на каждую строчку, а то откуда бы таблице знать, что кто-то в нее будет загружать 50000 строк. А BeginUpdate & EndUpdate существуют отдельно и их можно применить к любому контролу, а находятся они в компоненте RedrawManager. В начале цикла загрузки включаешь BeginUpdate, а в конце цикла EndUpdate. К тому же, для больших данных есть хитрый компонент таблицы -- MST_Virtual
карма: 22

0
Ответов: 5227
Рейтинг: 588
#8: 2020-11-28 13:38:56 ЛС | профиль | цитата
nesco писал(а):
существуют отдельно и их можно применить к любому контролу,

Не знаю так это или нет но в KOL комментариях они обозначены.
nesco писал(а):
К тому же, для больших данных есть хитрый компонент таблицы -- MST_Virtual

nesco, не в обиду, ни разу не использовал MTStrTbl и все его хитрости. (может и не прав конечно но при первых попытках показалось что сама сущность не логична)
Было бы логично здесь довести суть этих методов и для чего они применяются ну а после уже дать выбор нужен он или нет.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 207
Рейтинг: 14
#9: 2020-11-28 16:19:17 ЛС | профиль | цитата
andrestudio, Я это понимаю, поэтому схемой 3 и исключил все визуальные прорисовки. И это дало более-менее приемлемый результат.
nesco писал(а):
а то откуда бы таблице знать, что кто-то в нее будет загружать 50000 строк

Ну если загружать файл через MST_Load, то таблица знает это.
nesco писал(а):
В начале цикла загрузки включаешь BeginUpdate, а в конце цикла EndUpdate

Пробовал, ощутимой разницы не заметил.
nesco писал(а):
К тому же, для больших данных есть хитрый компонент таблицы -- MST_Virtual

Может я не особо понял схему из примера с использованием БД, поэтому и спросил.
Joiner писал(а):
есть ли способ быстрой загрузки данных в таблицу?

карма: 2

0
Ответов: 698
Рейтинг: 143
#10: 2020-11-28 18:22:27 ЛС | профиль | цитата
Joiner, сделал схему с MST_Virtual и генератором от Леонида , вроде очень шустро работает.
Add(MainForm,3063237,105,140)
{
Width=545
Height=349
link(onCreate,11085202:doWork1,[])
}
Add(StrList,4383086,287,140)
{
Point(EndIdx)
}
Add(ChildPanel,11085202,161,154)
{
link(onEvent2,9222564:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,7878121,21,21)
{
EventCount=2
WorkCount=1
Width=440
Height=270
link(doWork1,12297484:doEvent1,[(46,27)(46,97)])
}
Add(Panel,13137533,56,35)
{
Width=529
Height=30
Align=2
}
Add(Button,294400,42,126)
{
Left=15
Top=5
Caption="New"
link(onClick,12836985:doEvent1,[])
}
Add(Button,16443704,42,189)
{
Left=460
Top=5
Enabled=1
Caption="Save"
link(onClick,15140639:doEvent1,[])
}
Add(Edit,10340021,217,35)
{
Left=185
Top=5
Width=90
Text="20000"
DataType=2
}
Add(Label,13731098,168,35)
{
Left=125
Top=7
Width=61
Height=17
Caption="Кол. строк"
}
Add(Button,11871194,238,175)
{
Left=370
Top=5
Caption="View"
link(onClick,1896552:doData,[])
}
Add(LED,11063149,301,49)
{
Left=80
Top=5
Width=20
Height=20
ColorOff=65280
}
Add(Hub,12297484,91,91)
{
OutCount=4
link(onEvent1,3301899:doWork2,[(116,97)(116,83)])
link(onEvent2,3210884:doWork1,[])
link(onEvent3,3789266:doWork1,[(116,111)])
link(onEvent4,14611930:doWork2,[])
}
Add(MultiElement,3210884,217,98)
{
link(onEvent1,2339098:doAdd,[])
link(onEvent2,343437:doEvent1,[])
link(Data1,13711752:Var2,[])
}
BEGIN_SDK
Add(EditMulti,90280,28,21)
{
EventCount=2
WorkCount=2
DataCount=1
Width=440
Height=158
VOffset=7
HOffset=28
link(doWork1,15240120:doEvent1,[])
link(doWork2,15286128:doFor,[(39,41)(39,55)])
}
Add(For,15286128,49,49)
{
@Hint=#18:Количество абзацев|
IncludeEnd=1
link(onEvent,9486001:doRandom,[])
link(onStop,90280:onEvent2,[(88,62)(88,140)(455,140)(455,41)])
link(End,90280:Data1,[])
}
Add(For,11842154,154,49)
{
@Hint=#29:Количество слов в предложении|
link(onEvent,5410569:doText,[])
link(onStop,15892992:doEvent1,[(193,62)(193,97)])
link(End,9486001:Random,[(167,40)(146,40)(146,89)(111,89)])
}
Add(Random,9486001,105,49)
{
Min=7
Max=15
link(onRandom,11842154:doFor,[])
}
Add(InlineCode,5410569,203,42)
{
WorkPoints=#7:doStart|6:doText|
EventPoints=#5:onRes|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|23: onRes : THI_Event;|5: |52: procedure doStart(var _Data:TData; Index:Word); |50: procedure doText(var _Data:TData; Index:Word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doStart;|6: begin|12: Randomize;|5: end;|0:|29:procedure THiAsmClass.doText;|15:var sss:string;|16: i,j:integer;|16: _Rnd:double;|5:BEGIN|11: sss:=' ';|24: j:=round(Random*12)+2;|19: for i:=0 to j do|9: begin|18: _Rnd:=Random;|42: if _Rnd<0.0003 then sss:=sss+'ё' else|42: if _Rnd<0.0007 then sss:=sss+'ъ' else|42: if _Rnd<0.0033 then sss:=sss+'ф' else|42: if _Rnd<0.0065 then sss:=sss+'э' else|42: if _Rnd<0.0101 then sss:=sss+'щ' else|42: if _Rnd<0.0149 then sss:=sss+'ц' else|42: if _Rnd<0.0213 then sss:=sss+'ю' else|42: if _Rnd<0.0286 then sss:=sss+'ш' else|41: if _Rnd<0.038 then sss:=sss+'ж' else|42: if _Rnd<0.0477 then sss:=sss+'х' else|42: if _Rnd<0.0598 then sss:=sss+'й' else|42: if _Rnd<0.0742 then sss:=sss+'ч' else|42: if _Rnd<0.0901 then sss:=sss+'б' else|42: if _Rnd<0.1066 then sss:=sss+'з' else|42: if _Rnd<0.1236 then sss:=sss+'г' else|41: if _Rnd<0.141 then sss:=sss+'ь' else|40: if _Rnd<0.16 then sss:=sss+'ы' else|42: if _Rnd<0.1801 then sss:=sss+'я' else|42: if _Rnd<0.2063 then sss:=sss+'у' else|42: if _Rnd<0.2344 then sss:=sss+'п' else|42: if _Rnd<0.2642 then sss:=sss+'д' else|42: if _Rnd<0.2963 then sss:=sss+'м' else|42: if _Rnd<0.3312 then sss:=sss+'к' else|42: if _Rnd<0.3752 then sss:=sss+'л' else|42: if _Rnd<0.4206 then sss:=sss+'в' else|42: if _Rnd<0.4679 then sss:=sss+'р' else|42: if _Rnd<0.5226 then sss:=sss+'с' else|42: if _Rnd<0.5852 then sss:=sss+'т' else|42: if _Rnd<0.6522 then sss:=sss+'н' else|42: if _Rnd<0.7257 then sss:=sss+'и' else|42: if _Rnd<0.8058 then sss:=sss+'а' else|42: if _Rnd<0.8903 then sss:=sss+'е' else|34: if _Rnd<1 then sss:=sss+'о'; |9: end;|25: _hi_onEvent(onRes,sss);|4:END;|0:|0:|4:end.|
link(onRes,15879034:doWork2,[])
}
Add(StrCat,13455235,308,42)
{
Point(doClear)
link(Str1,7063167:Var3,[(314,33)(328,33)(328,82)])
}
Add(Hub,15240120,70,28)
{
link(onEvent1,5410569:doStart,[(193,34)(193,48)])
link(onEvent2,9486001:doRandomize,[(95,41)(95,62)])
}
Add(DoData,7170534,308,98)
{
link(onEventData,16600547:doTrim,[])
link(Data,7063167:Var2,[])
}
Add(GetDataEx,7063167,308,77)
{
link(Data,13455235:Result,[])
}
Add(Hub,15892992,203,91)
{
OutCount=3
link(onEvent1,7526937:doData,[(242,97)(242,62)])
link(onEvent2,7170534:doData,[])
link(onEvent3,13455235:doClear,[(298,111)(298,55)])
}
Add(DoData,7526937,252,56)
{
Data=String(. )
link(onEventData,15879034:doWork3,[(291,62)])
}
Add(HubEx,15879034,287,42)
{
link(onEvent,13455235:doStrCat,[])
}
Add(StrCase,14266070,406,98)
{
Type=3
link(onModify,90280:onEvent1,[(445,104)(445,34)])
}
Add(Trim,16600547,357,98)
{
Char=" "
Mode=4
link(onTrim,14266070:doModify,[])
}
END_SDK
Add(Hub,12836985,91,126)
{
OutCount=3
link(onEvent1,3301899:doWork3,[(123,132)])
link(onEvent2,3789266:doWork2,[])
link(onEvent3,14611930:doWork3,[(130,146)])
}
Add(HubEx,3301899,119,77)
{
link(onEvent,16463242:doEvent1,[])
}
Add(StrList,2339098,301,98)
{
Point(doSave)
}
Add(DoData,1896552,301,175)
{
link(onEventData,7878121:onEvent2,[(360,181)(360,34)])
link(Data,633127:Var2,[])
}
Add(SDialog,3850500,217,133)
{
Filter="TXT|*.txt"
Point(doFileName)
link(onExecute,2339098:doSave,[])
}
Add(TimeCounter,526452,350,217)
{
link(onStop,10660108:doString,[])
}
Add(Length,4653976,294,224)
{
link(onLength,526452:doStop,[])
link(Str,633127:Var1,[(300,166)])
}
Add(FormatStr,10660108,399,224)
{
DataCount=3
Mask="Сгенерировано %1 символов в %3 строках за %2 мсек"
link(onFString,7878121:onEvent1,[(443,230)(443,27)])
link(Str1,4653976:Result,[(405,215)(391,215)(391,264)(300,264)])
link(Str3,2339098:Count,[(419,159)(314,159)])
}
Add(GetDataEx,633127,301,161)
{
link(Data,2339098:Text,[])
}
Add(HubEx,3789266,112,133)
{
Angle=1
link(onEvent,526452:doStart,[(116,223)])
}
Add(HubEx,14611930,126,112)
{
Angle=3
link(onEvent,3646847:doStart,[(130,111)])
}
Add(Hub,16463242,238,77)
{
link(onEvent1,11063149:doOn,[(291,83)(291,69)])
link(onEvent2,2339098:doClear,[(291,90)(291,111)])
}
Add(Hub,343437,259,105)
{
link(onEvent1,11063149:doOff,[(284,111)(284,62)])
link(onEvent2,4653976:doLength,[(284,118)(284,230)])
}
Add(Thread,3646847,161,105)
{
Delay=20
FastStop=0
link(onExec,3210884:doWork2,[])
}
Add(Hub,15140639,91,189)
{
link(onEvent1,7492483:doOperation,[])
link(onEvent2,3850500:doExecute,[(123,202)(123,181)(200,181)(200,139)])
}
Add(Math,7492483,133,189)
{
OpType=3
Op2=1000
ResultType=0
link(onResult,3543045:doStrCat,[])
link(Op1,13711752:Var1,[(139,75)])
}
Add(GetDataEx,13711752,217,70)
{
link(Data,10340021:Text,[])
}
Add(StrCat,3543045,175,189)
{
Str2="Кстр.txt"
link(onStrCat,3850500:doFileName,[(214,195)(214,181)(207,181)(207,146)])
}
END_SDK
Add(MST_Virtual,15555683,420,210)
{
MSTControl="MTStrTbl"
Point(doSetVirtIdx)
link(onChangeVirtIdx,4071568:doEvent1,[])
link(VirtualData,8915826:GetData,[(426,201)(461,201)(461,397)(657,397)])
}
Add(MathParse,4883725,252,238)
{
MathStr="(%2 - sign(%1) * 3) * ((%2 - sign(%1) * 3) >= 0)"
ResultType=0
link(onResult,5531226:doCompare,[])
link(X2,15555683:CurVirtIdx,[(265,229)(293,229)(293,257)(426,257)])
}
Add(If_else,5531226,301,238)
{
Type=1
link(onTrue,15555683:doSetVirtIdx,[])
link(Op2,4383086:EndIdx,[])
}
Add(EventFromData,8915826,651,350)
{
link(onEvent,83609:doSeparateMT,[])
}
Add(For,8901862,609,266)
{
link(onEvent,91022:doRead,[])
link(Start,10721694:Value,[(615,257)(559,257)])
link(End,7765738:Result,[])
}
Add(Hub,4071568,490,210)
{
link(onEvent1,10721694:doValue,[])
link(onEvent2,8901862:doFor,[(522,223)(522,272)])
}
Add(Math,7765738,616,210)
{
ResultType=0
link(onResult,53467:doClear,[(729,216)(729,279)])
link(Op2,15555683:PerPage,[(629,201)(482,201)(482,257)(440,257)])
}
Add(StrList,53467,756,266)
{
}
Add(Hub,9222564,210,161)
{
link(onEvent1,4383086:doText,[])
link(onEvent2,8932995:In,[])
}
Add(MTStrTbl,7148080,189,210)
{
Top=30
Width=529
Height=280
Name="MTStrTbl"
Columns=#1:1|
FlatScroll=1
ColumnWidth=500
VirtualTab=0
Style=4
Point(onMouseWheel)
link(onMouseWheel,4883725:doCalc,[])
}
Add(MT_MultiData,83609,700,350)
{
From=1
link(onData1,15065628:doRead,[])
}
Add(ArrayRW,15065628,770,350)
{
link(onRead,8915826:doData,[(809,356)(809,342)(641,342)(641,356)])
link(Array,53467:Array,[])
}
Add(Memory,10721694,553,210)
{
link(onData,7765738:doOperation,[])
}
Add(ArrayRW,91022,672,266)
{
link(onRead,53467:doAdd,[])
link(Array,4383086:Array,[(678,180)(307,180)])
link(Index,8901862:Position,[(685,257)(664,257)(664,306)(615,306)])
}
Add(LineBreak,6020064,378,231)
{
link(Out,15555683:doResetPage,[])
Primary=[8932995,-140,-63]
}

По поводу Excel, у него много достоинств но, быстродействие это не его сильная черта.
Если передавать данные в excel построчно то... успеваю чай себе налить.
Add(MainForm,4598991,119,147)
{
Width=545
Height=284
Point(onClose)
link(onCreate,13264365:doWork1,[])
}
Add(StrList,2583656,259,147)
{
}
Add(ArrayEnum,1976442,273,210)
{
link(onItem,5432892:doWrite,[])
link(onEndEnum,5432892:doClose,[])
link(Array,2583656:Array,[])
}
Add(TimeCounter,484440,399,203)
{
link(onStart,9655644:In,[(438,209)(438,195)])
link(onStop,9742849:In,[])
}
Add(ChildPanel,13264365,175,161)
{
link(onEvent2,9162188:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,14423383,21,21)
{
EventCount=2
WorkCount=1
Width=440
Height=270
link(doWork1,16501226:doEvent1,[(46,27)(46,97)])
}
Add(Panel,3764623,56,35)
{
Width=529
Height=30
Align=2
}
Add(Button,2085515,42,126)
{
Left=15
Top=5
Caption="New"
link(onClick,3154751:doEvent1,[])
}
Add(Button,6499047,42,189)
{
Left=460
Top=5
Enabled=1
Caption="Save"
link(onClick,7567131:doEvent1,[])
}
Add(Edit,11335160,217,35)
{
Left=185
Top=5
Width=90
Text="20000"
DataType=2
}
Add(Label,152480,168,35)
{
Left=125
Top=7
Width=61
Height=17
Caption="Кол. строк"
}
Add(Button,8812432,238,175)
{
Left=370
Top=5
Caption="to Excel"
link(onClick,246572:doData,[])
}
Add(LED,9062772,301,49)
{
Left=80
Top=5
Width=20
Height=20
ColorOff=65280
}
Add(Hub,16501226,91,91)
{
OutCount=4
link(onEvent1,5123609:doWork2,[(116,97)(116,83)])
link(onEvent2,4808525:doWork1,[])
link(onEvent3,4110144:doWork1,[(116,111)])
link(onEvent4,10119668:doWork2,[])
}
Add(MultiElement,4808525,217,98)
{
link(onEvent1,3662929:doAdd,[])
link(onEvent2,553711:doEvent1,[])
link(Data1,12180389:Var2,[])
}
BEGIN_SDK
Add(EditMulti,12843563,28,21)
{
EventCount=2
WorkCount=2
DataCount=1
Width=440
Height=158
VOffset=7
HOffset=28
link(doWork1,4723815:doEvent1,[])
link(doWork2,5160363:doFor,[(39,41)(39,55)])
}
Add(For,5160363,49,49)
{
@Hint=#18:Количество абзацев|
IncludeEnd=1
link(onEvent,10227921:doRandom,[])
link(onStop,12843563:onEvent2,[(88,62)(88,140)(455,140)(455,41)])
link(End,12843563:Data1,[])
}
Add(For,8217345,154,49)
{
@Hint=#29:Количество слов в предложении|
link(onEvent,12535190:doText,[])
link(onStop,7363015:doEvent1,[(193,62)(193,97)])
link(End,10227921:Random,[(167,40)(146,40)(146,89)(111,89)])
}
Add(Random,10227921,105,49)
{
Min=7
Max=15
link(onRandom,8217345:doFor,[])
}
Add(InlineCode,12535190,203,42)
{
WorkPoints=#7:doStart|6:doText|
EventPoints=#5:onRes|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|23: onRes : THI_Event;|5: |52: procedure doStart(var _Data:TData; Index:Word); |50: procedure doText(var _Data:TData; Index:Word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doStart;|6: begin|12: Randomize;|5: end;|0:|29:procedure THiAsmClass.doText;|15:var sss:string;|16: i,j:integer;|16: _Rnd:double;|5:BEGIN|11: sss:=' ';|24: j:=round(Random*12)+2;|19: for i:=0 to j do|9: begin|18: _Rnd:=Random;|42: if _Rnd<0.0003 then sss:=sss+'ё' else|42: if _Rnd<0.0007 then sss:=sss+'ъ' else|42: if _Rnd<0.0033 then sss:=sss+'ф' else|42: if _Rnd<0.0065 then sss:=sss+'э' else|42: if _Rnd<0.0101 then sss:=sss+'щ' else|42: if _Rnd<0.0149 then sss:=sss+'ц' else|42: if _Rnd<0.0213 then sss:=sss+'ю' else|42: if _Rnd<0.0286 then sss:=sss+'ш' else|41: if _Rnd<0.038 then sss:=sss+'ж' else|42: if _Rnd<0.0477 then sss:=sss+'х' else|42: if _Rnd<0.0598 then sss:=sss+'й' else|42: if _Rnd<0.0742 then sss:=sss+'ч' else|42: if _Rnd<0.0901 then sss:=sss+'б' else|42: if _Rnd<0.1066 then sss:=sss+'з' else|42: if _Rnd<0.1236 then sss:=sss+'г' else|41: if _Rnd<0.141 then sss:=sss+'ь' else|40: if _Rnd<0.16 then sss:=sss+'ы' else|42: if _Rnd<0.1801 then sss:=sss+'я' else|42: if _Rnd<0.2063 then sss:=sss+'у' else|42: if _Rnd<0.2344 then sss:=sss+'п' else|42: if _Rnd<0.2642 then sss:=sss+'д' else|42: if _Rnd<0.2963 then sss:=sss+'м' else|42: if _Rnd<0.3312 then sss:=sss+'к' else|42: if _Rnd<0.3752 then sss:=sss+'л' else|42: if _Rnd<0.4206 then sss:=sss+'в' else|42: if _Rnd<0.4679 then sss:=sss+'р' else|42: if _Rnd<0.5226 then sss:=sss+'с' else|42: if _Rnd<0.5852 then sss:=sss+'т' else|42: if _Rnd<0.6522 then sss:=sss+'н' else|42: if _Rnd<0.7257 then sss:=sss+'и' else|42: if _Rnd<0.8058 then sss:=sss+'а' else|42: if _Rnd<0.8903 then sss:=sss+'е' else|34: if _Rnd<1 then sss:=sss+'о'; |9: end;|25: _hi_onEvent(onRes,sss);|4:END;|0:|0:|4:end.|
link(onRes,13291602:doWork2,[])
}
Add(StrCat,14232566,308,42)
{
Point(doClear)
link(Str1,5097859:Var3,[(314,33)(328,33)(328,82)])
}
Add(Hub,4723815,70,28)
{
link(onEvent1,12535190:doStart,[(193,34)(193,48)])
link(onEvent2,10227921:doRandomize,[(95,41)(95,62)])
}
Add(DoData,10615171,308,98)
{
link(onEventData,13267547:doTrim,[])
link(Data,5097859:Var2,[])
}
Add(GetDataEx,5097859,308,77)
{
link(Data,14232566:Result,[])
}
Add(Hub,7363015,203,91)
{
OutCount=3
link(onEvent1,4570222:doData,[(242,97)(242,62)])
link(onEvent2,10615171:doData,[])
link(onEvent3,14232566:doClear,[(298,111)(298,55)])
}
Add(DoData,4570222,252,56)
{
Data=String(. )
link(onEventData,13291602:doWork3,[(291,62)])
}
Add(HubEx,13291602,287,42)
{
link(onEvent,14232566:doStrCat,[])
}
Add(StrCase,3376382,406,98)
{
Type=3
link(onModify,12843563:onEvent1,[(445,104)(445,34)])
}
Add(Trim,13267547,357,98)
{
Char=" "
Mode=4
link(onTrim,3376382:doModify,[])
}
END_SDK
Add(Hub,3154751,91,126)
{
OutCount=3
link(onEvent1,5123609:doWork3,[(123,132)])
link(onEvent2,4110144:doWork2,[])
link(onEvent3,10119668:doWork3,[(130,146)])
}
Add(HubEx,5123609,119,77)
{
link(onEvent,11474619:doEvent1,[])
}
Add(StrList,3662929,301,98)
{
Point(doSave)
}
Add(DoData,246572,301,175)
{
link(onEventData,14423383:onEvent2,[(360,181)(360,34)])
link(Data,922164:Var2,[])
}
Add(SDialog,6863944,217,133)
{
Filter="TXT|*.txt"
Point(doFileName)
link(onExecute,3662929:doSave,[])
}
Add(TimeCounter,16188405,350,217)
{
link(onStop,10893304:doString,[])
}
Add(Length,8654090,294,224)
{
link(onLength,16188405:doStop,[])
link(Str,922164:Var1,[(300,166)])
}
Add(FormatStr,10893304,399,224)
{
DataCount=3
Mask="Сгенерировано %1 символов в %3 строках за %2 мсек"
link(onFString,14423383:onEvent1,[(443,230)(443,27)])
link(Str1,8654090:Result,[(405,215)(391,215)(391,264)(300,264)])
link(Str3,3662929:Count,[(419,159)(314,159)])
}
Add(GetDataEx,922164,301,161)
{
link(Data,3662929:Text,[])
}
Add(HubEx,4110144,112,133)
{
Angle=1
link(onEvent,16188405:doStart,[(116,223)])
}
Add(HubEx,10119668,126,112)
{
Angle=3
link(onEvent,3964312:doStart,[(130,111)])
}
Add(Hub,11474619,238,77)
{
link(onEvent1,9062772:doOn,[(291,83)(291,69)])
link(onEvent2,3662929:doClear,[(291,90)(291,111)])
}
Add(Hub,553711,259,105)
{
link(onEvent1,9062772:doOff,[(284,111)(284,62)])
link(onEvent2,8654090:doLength,[(284,118)(284,230)])
}
Add(Thread,3964312,161,105)
{
Delay=20
FastStop=0
link(onExec,4808525:doWork2,[])
}
Add(Hub,7567131,91,189)
{
link(onEvent1,5176239:doOperation,[])
link(onEvent2,6863944:doExecute,[(123,202)(123,181)(200,181)(200,139)])
}
Add(Math,5176239,133,189)
{
OpType=3
Op2=1000
ResultType=0
link(onResult,12908760:doStrCat,[])
link(Op1,12180389:Var1,[(139,75)])
}
Add(GetDataEx,12180389,217,70)
{
link(Data,11335160:Text,[])
}
Add(StrCat,12908760,175,189)
{
Str2="Кстр.txt"
link(onStrCat,6863944:doFileName,[(214,195)(214,181)(207,181)(207,146)])
}
END_SDK
Add(Hub,9162188,224,168)
{
link(onEvent1,2583656:doText,[])
link(onEvent2,5432892:doOpen,[(314,181)(314,209)])
}
Add(VBJScript,5432892,343,203)
{
@Hint=#16:Query SQL Server|
WorkPoints=#6:doOpen|7:doWrite|7:doClose|0:|
EventPoints=#12:onStartTimer|13:onFinishTimer|
DataPoints=#8:inputStr|
Script=#33:Dim objExcel, objWorkbook, NumRow|22:Sub doWork(Data,Index)|0:|17:Select Case Index|16: Case "doOpen" |52: Set objExcel = CreateObject("Excel.Application")|46: Set objWorkbook = objExcel.Workbooks.Add()|24: objExcel.Visible = True|36: 'objExcel.ScreenUpdating = False|47: 'objExcel.Calculation = xlCalculationManual|34: 'objExcel.EnableEvents = False|38: 'objExcel.DisplayStatusBar = False|35: 'objExcel.DisplayAlerts = False|21: sys.onStartTimer nil|20: Case "doWrite" |23: NumRow = NumRow + 1|52: objExcel.ActiveSheet.Cells(NumRow, 1).Value=Data|16: Case "doClose"|25: sys.onFinishTimer nil|17: objExcel.Quit|27: Set objExcel = Nothing |10:End Select|3: |8:End Sub |1: |
UseName=0
link(onStartTimer,484440:doStart,[])
link(onFinishTimer,484440:doStop,[])
}
Add(LineBreak,7229618,63,147)
{
link(Out,4598991:doCaption,[])
Primary=[9742849,399,63]
}
Add(LineBreak,724145,217,210)
{
link(Out,1976442:doEnum,[])
Primary=[9655644,245,-21]
}


Редактировалось 1 раз(а), последний 2020-11-28 18:25:32
карма: 15

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#11: 2020-11-28 22:20:25 ЛС | профиль | цитата
Gunta писал(а):
вроде очень шустро работает

Так по идее этот метод и задумывался Кладовым именно для очень больших объемов данных. Метод виртуализации таблицы грузит в таблицу только видимый диапазон данных, а не все XXX строки.

--- Добавлено в 2020-11-28 22:38:04

andrestudio писал(а):
может и не прав конечно но при первых попытках показалось что сама сущность не логична

Я не исключаю, что применение MT-потоков не является, может быть, самым логичным и простым в понимании решением, к тому же, довольно сложным в реализации. Но вот "логичность" метода упихивания всего и вся в один компонент можно смело посмотреть в StringTableMT (почему-то многими любимого). Я без содрогания на него не могу смотреть, пусть даже и являюсь автором этого компонента. Если появляется более менее сложная задача с таблицей, то схема превращается в ужас по связям, в последовательности которых сам черт не разберется уже в режиме проектирования, не говоря о прошествии некоторого времени. Это и натолкнуло меня на создание MTStrTbl, где основные группы методов работы с таблицей разнесены в разные компоненты, которые можно ставить в разные концы схемы, не имея видимых связей. К тому же, каждый компонент группы методов имеет для каждого метода группы свою иконку, те иконки отображают суть текущего метода на компоненте, а не одна на все случаи жизни.

Редактировалось 2 раз(а), последний 2020-11-28 22:50:11
карма: 22

0
Ответов: 698
Рейтинг: 143
#12: 2020-11-29 13:51:04 ЛС | профиль | цитата
Соглашусь со многими что компонент MST_Virtual не очень интуитивно понятен, но схемы на нём просто летают.
Для быстрой прокрутки 20000 строк и более добавил ScrollBar.(500000 строк генерируются более 2 мин, просмотр мгновенный)
Add(Matrix,327698,315,378)
{
MatrixType=2
Point(Size)
link(Size,16351534:Point,[])
}
Add(MatrixRW,1592271,315,476)
{
Value=String()
Point(doClear)
link(onRead,8915826:doData,[(354,482)(354,461)(207,461)(207,482)])
link(Matrix,1696896:Var2,[])
link(X,10994896:Value3,[(335,467)(307,467)(307,516)(286,516)])
link(Y,10994896:Value2,[(342,467)(363,467)(363,523)(279,523)])
}
Add(MainForm,3063237,140,70)
{
Width=627
Height=430
link(onCreate,11085202:doWork1,[])
}
Add(StrList,4383086,392,63)
{
Point(EndIdx)
}
Add(ChildPanel,11085202,196,84)
{
link(onEvent2,9222564:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,7878121,21,21)
{
EventCount=2
WorkCount=1
Width=440
Height=270
link(doWork1,12297484:doEvent1,[(46,27)(46,97)])
}
Add(Panel,13137533,56,35)
{
Width=611
Height=30
Align=2
}
Add(Button,294400,42,126)
{
Left=15
Top=5
Caption="New"
link(onClick,12836985:doEvent1,[])
}
Add(Button,16443704,42,189)
{
Left=460
Top=5
Enabled=1
Caption="Save"
link(onClick,15140639:doEvent1,[])
}
Add(Edit,10340021,217,35)
{
Left=185
Top=5
Width=90
Text="20000"
DataType=2
}
Add(Label,13731098,168,35)
{
Left=125
Top=7
Width=61
Height=17
Caption="Кол. строк"
}
Add(Button,11871194,238,175)
{
Left=370
Top=5
Caption="View"
link(onClick,1896552:doData,[])
}
Add(LED,11063149,301,49)
{
Left=80
Top=5
Width=20
Height=20
ColorOff=65280
}
Add(Hub,12297484,91,91)
{
OutCount=4
link(onEvent1,3301899:doWork2,[(116,97)(116,83)])
link(onEvent2,3210884:doWork1,[])
link(onEvent3,3789266:doWork1,[(116,111)])
link(onEvent4,14611930:doWork2,[])
}
Add(MultiElement,3210884,217,98)
{
link(onEvent1,2339098:doAdd,[])
link(onEvent2,343437:doEvent1,[])
link(Data1,13711752:Var2,[])
}
BEGIN_SDK
Add(EditMulti,90280,28,21)
{
EventCount=2
WorkCount=2
DataCount=1
Width=636
Height=158
VOffset=7
HOffset=28
link(doWork1,15240120:doEvent1,[])
link(doWork2,15286128:doFor,[(39,41)(39,55)])
}
Add(For,15286128,49,49)
{
@Hint=#18:Количество абзацев|
IncludeEnd=1
link(onEvent,9486001:doRandom,[])
link(onStop,90280:onEvent2,[(88,62)(88,158)(603,158)(603,41)])
link(End,90280:Data1,[])
}
Add(For,11842154,154,49)
{
@Hint=#29:Количество слов в предложении|
link(onEvent,5410569:doText,[])
link(onStop,15892992:doEvent1,[(193,62)(193,97)])
link(End,9486001:Random,[(167,40)(146,40)(146,89)(111,89)])
}
Add(Random,9486001,105,49)
{
Min=7
Max=15
link(onRandom,11842154:doFor,[])
}
Add(InlineCode,5410569,203,42)
{
WorkPoints=#7:doStart|6:doText|
EventPoints=#5:onRes|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|23: onRes : THI_Event;|5: |52: procedure doStart(var _Data:TData; Index:Word); |50: procedure doText(var _Data:TData; Index:Word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doStart;|6: begin|12: Randomize;|5: end;|0:|29:procedure THiAsmClass.doText;|15:var sss:string;|16: i,j:integer;|16: _Rnd:double;|5:BEGIN|11: sss:=' ';|24: j:=round(Random*12)+2;|19: for i:=0 to j do|9: begin|18: _Rnd:=Random;|42: if _Rnd<0.0003 then sss:=sss+'ё' else|42: if _Rnd<0.0007 then sss:=sss+'ъ' else|42: if _Rnd<0.0033 then sss:=sss+'ф' else|42: if _Rnd<0.0065 then sss:=sss+'э' else|42: if _Rnd<0.0101 then sss:=sss+'щ' else|42: if _Rnd<0.0149 then sss:=sss+'ц' else|42: if _Rnd<0.0213 then sss:=sss+'ю' else|42: if _Rnd<0.0286 then sss:=sss+'ш' else|41: if _Rnd<0.038 then sss:=sss+'ж' else|42: if _Rnd<0.0477 then sss:=sss+'х' else|42: if _Rnd<0.0598 then sss:=sss+'й' else|42: if _Rnd<0.0742 then sss:=sss+'ч' else|42: if _Rnd<0.0901 then sss:=sss+'б' else|42: if _Rnd<0.1066 then sss:=sss+'з' else|42: if _Rnd<0.1236 then sss:=sss+'г' else|41: if _Rnd<0.141 then sss:=sss+'ь' else|40: if _Rnd<0.16 then sss:=sss+'ы' else|42: if _Rnd<0.1801 then sss:=sss+'я' else|42: if _Rnd<0.2063 then sss:=sss+'у' else|42: if _Rnd<0.2344 then sss:=sss+'п' else|42: if _Rnd<0.2642 then sss:=sss+'д' else|42: if _Rnd<0.2963 then sss:=sss+'м' else|42: if _Rnd<0.3312 then sss:=sss+'к' else|42: if _Rnd<0.3752 then sss:=sss+'л' else|42: if _Rnd<0.4206 then sss:=sss+'в' else|42: if _Rnd<0.4679 then sss:=sss+'р' else|42: if _Rnd<0.5226 then sss:=sss+'с' else|42: if _Rnd<0.5852 then sss:=sss+'т' else|42: if _Rnd<0.6522 then sss:=sss+'н' else|42: if _Rnd<0.7257 then sss:=sss+'и' else|42: if _Rnd<0.8058 then sss:=sss+'а' else|42: if _Rnd<0.8903 then sss:=sss+'е' else|34: if _Rnd<1 then sss:=sss+'о'; |9: end;|25: _hi_onEvent(onRes,sss);|4:END;|0:|0:|4:end.|
link(onRes,15879034:doWork2,[])
}
Add(StrCat,13455235,308,42)
{
Point(doClear)
link(Str1,7063167:Var3,[(314,33)(328,33)(328,82)])
}
Add(Hub,15240120,70,28)
{
link(onEvent1,5410569:doStart,[(193,34)(193,48)])
link(onEvent2,9486001:doRandomize,[(95,41)(95,62)])
}
Add(DoData,7170534,308,98)
{
link(onEventData,16600547:doTrim,[])
link(Data,7063167:Var2,[])
}
Add(GetDataEx,7063167,308,77)
{
link(Data,13455235:Result,[])
}
Add(Hub,15892992,203,91)
{
OutCount=3
link(onEvent1,7526937:doData,[(242,97)(242,62)])
link(onEvent2,7170534:doData,[])
link(onEvent3,13455235:doClear,[(298,111)(298,55)])
}
Add(DoData,7526937,252,56)
{
Data=String(. )
link(onEventData,15879034:doWork3,[(291,62)])
}
Add(HubEx,15879034,287,42)
{
link(onEvent,13455235:doStrCat,[])
}
Add(StrCase,14266070,406,98)
{
Type=3
link(onModify,131368:doString,[])
}
Add(Trim,16600547,357,98)
{
Char=" "
Mode=4
link(onTrim,14266070:doModify,[])
}
Add(FormatStr,131368,469,98)
{
Mask="%1;%2"
link(onFString,90280:onEvent1,[(508,104)(508,34)])
link(Str1,15286128:Position,[(475,89)(461,89)(461,138)(55,138)])
}
END_SDK
Add(Hub,12836985,91,126)
{
OutCount=3
link(onEvent1,3301899:doWork3,[(123,132)])
link(onEvent2,3789266:doWork2,[])
link(onEvent3,14611930:doWork3,[(130,146)])
}
Add(HubEx,3301899,119,77)
{
link(onEvent,16463242:doEvent1,[])
}
Add(StrList,2339098,301,98)
{
Point(doSave)
}
Add(DoData,1896552,301,175)
{
link(onEventData,7878121:onEvent2,[(360,181)(360,34)])
link(Data,633127:Var2,[])
}
Add(SDialog,3850500,217,133)
{
Filter="TXT|*.txt"
Point(doFileName)
link(onExecute,2339098:doSave,[(291,139)(291,132)])
}
Add(TimeCounter,526452,350,217)
{
link(onStop,10660108:doString,[])
}
Add(Length,4653976,294,224)
{
link(onLength,526452:doStop,[])
link(Str,633127:Var1,[(300,166)])
}
Add(FormatStr,10660108,399,224)
{
DataCount=3
Mask="Сгенерировано %1 символов в %3 строках за %2 мсек"
link(onFString,7878121:onEvent1,[(443,230)(443,27)])
link(Str1,4653976:Result,[(405,215)(391,215)(391,264)(300,264)])
link(Str3,2339098:Count,[(419,159)(314,159)])
}
Add(GetDataEx,633127,301,161)
{
link(Data,2339098:Text,[])
}
Add(HubEx,3789266,112,133)
{
Angle=1
link(onEvent,526452:doStart,[(116,223)])
}
Add(HubEx,14611930,126,112)
{
Angle=3
link(onEvent,3646847:doStart,[(130,111)])
}
Add(Hub,16463242,238,77)
{
link(onEvent1,11063149:doOn,[(291,83)(291,69)])
link(onEvent2,2339098:doClear,[(291,90)(291,111)])
}
Add(Hub,343437,259,105)
{
link(onEvent1,11063149:doOff,[(284,111)(284,62)])
link(onEvent2,4653976:doLength,[(284,118)(284,230)])
}
Add(Thread,3646847,161,105)
{
Delay=20
FastStop=0
link(onExec,3210884:doWork2,[])
}
Add(Hub,15140639,91,189)
{
link(onEvent1,7492483:doOperation,[])
link(onEvent2,3850500:doExecute,[(123,202)(123,181)(200,181)(200,139)])
}
Add(Math,7492483,133,189)
{
OpType=3
Op2=1000
ResultType=0
link(onResult,3543045:doStrCat,[])
link(Op1,13711752:Var1,[(139,75)])
}
Add(GetDataEx,13711752,217,70)
{
link(Data,10340021:Text,[])
}
Add(StrCat,3543045,175,189)
{
Str2="Кстр.txt"
link(onStrCat,3850500:doFileName,[(214,195)(214,181)(207,181)(207,146)])
}
END_SDK
Add(MST_Virtual,15555683,476,259)
{
MSTControl="MTStrTbl"
Point(doSetVirtIdx)
link(onChangeVirtIdx,4071568:doEvent1,[])
link(VirtualData,14963362:Var,[])
}
Add(MathParse,4883725,357,287)
{
MathStr="(%2 - sign(%1) * 3) * ((%2 - sign(%1) * 3) >= 0)"
ResultType=0
link(onResult,5531226:doCompare,[])
link(X2,15555683:CurVirtIdx,[(370,278)(447,278)(447,306)(482,306)])
}
Add(If_else,5531226,406,287)
{
Type=1
link(onTrue,14213054:doWork2,[])
link(Op2,4383086:EndIdx,[])
}
Add(EventFromData,8915826,217,476)
{
link(onEvent,10994896:doValue,[])
}
Add(For,8901862,616,336)
{
link(onEvent,91022:doRead,[])
link(onStop,8605718:doReset,[(655,349)(655,398)])
link(Start,10721694:Value,[(622,327)(580,327)])
link(End,7765738:Result,[])
}
Add(Hub,4071568,525,259)
{
OutCount=3
link(onEvent1,1165375:In,[])
link(onEvent2,10721694:doValue,[(564,272)(564,286)])
link(onEvent3,8901862:doFor,[(557,279)(557,342)])
}
Add(Math,7765738,623,280)
{
ResultType=0
link(Op2,15555683:PerPage,[(636,250)(517,250)(517,306)(496,306)])
}
Add(Hub,9222564,245,91)
{
OutCount=3
link(onEvent1,4383086:doText,[(375,97)(375,90)])
link(onEvent2,15555683:doResetPage,[(466,104)(466,286)])
link(onEvent3,1551736:doData,[(305,111)(305,167)])
}
Add(MTStrTbl,7148080,294,259)
{
Top=30
Width=591
Height=361
Align=5
Name="MTStrTbl"
Columns=#4:1=50|5:2=500|
VirtualTab=0
Point(onMouseWheel)
Point(PerPage)
link(onMouseWheel,4883725:doCalc,[])
}
Add(Memory,10721694,574,280)
{
link(onData,7765738:doOperation,[])
}
Add(ArrayRW,91022,672,336)
{
link(onRead,10729404:doEvent1,[])
link(Array,4383086:Array,[(678,124)(412,124)])
}
Add(MT_MultiMem,10994896,266,476)
{
Count=3
link(onData,1592271:doRead,[])
}
Add(PointXY,16351534,315,329)
{
link(X,7148080:CountCol,[])
link(Y,7148080:PerPage,[])
}
Add(LineBreak,15771604,217,518)
{
Type=1
link(Data,8915826:GetData,[])
Primary=[14963362,259,-287]
}
Add(Str_Enum,625405,763,336)
{
From=0
link(onEnum,7441290:doWrite,[])
}
Add(MatrixRW,7441290,812,329)
{
Point(doClear)
link(Matrix,1696896:Var3,[(818,313)(863,313)(863,446)])
link(X,625405:NumSubStr,[(832,320)(804,320)(804,376)(769,376)])
link(Y,8605718:Count,[(839,320)(853,320)(853,432)(769,432)])
}
Add(CounterEx,8605718,763,385)
{
Point(doReset)
}
Add(Hub,10729404,714,336)
{
link(onEvent1,625405:doEnum,[])
link(onEvent2,8605718:doNext,[(739,349)(739,391)])
}
Add(ScrollBar,16623256,364,154)
{
Left=591
Top=30
Width=20
Height=361
Align=3
Kind=1
Point(doMax)
Point(doPage)
link(onPosition,14213054:doWork1,[(459,160)])
}
Add(DoData,1551736,315,161)
{
link(onEventData,16623256:doMax,[])
link(Data,4383086:Count,[(321,110)(405,110)])
}
Add(HubEx,14213054,455,287)
{
link(onEvent,15555683:doSetVirtIdx,[])
}
Add(Hub,15504297,280,378)
{
link(onEvent1,327698:doSize,[])
link(onEvent2,327698:doClear,[])
}
Add(LineBreak,3788241,231,378)
{
link(Out,15504297:doEvent1,[])
Primary=[1165375,343,-119]
}
Add(GetDataEx,1696896,315,441)
{
link(Data,327698:Matrix,[])
}


Редактировалось 2 раз(а), последний 2020-11-29 14:24:48
карма: 15

1
Голосовали:Joiner
Ответов: 207
Рейтинг: 14
#13: 2020-11-29 16:15:11 ЛС | профиль | цитата
Gunta, Спасибо.
Пока не смог понять возможно добавлять иконки используя MST_Virtual

Редактировалось 1 раз(а), последний 2020-12-01 14:30:08
карма: 2

0
Ответов: 698
Рейтинг: 143
#14: 2020-11-29 17:14:02 ЛС | профиль | цитата
Joiner писал(а):
Пока не смог понять возможно добавлять иконки используя MST_Virtual

Наверное, как-то так. (Исправь ">" в MathParse если выдаст ошибку)
Add(Matrix,327698,350,406)
{
MatrixType=2
Point(Size)
link(Size,16351534:Point,[])
}
Add(MatrixRW,1592271,350,560)
{
Value=String()
Point(doClear)
link(onRead,14741939:doEvent1,[])
link(Matrix,1696896:Var2,[])
link(X,10994896:Value3,[(370,551)(342,551)(342,600)(321,600)])
link(Y,10994896:Value2,[(377,551)(398,551)(398,607)(314,607)])
}
Add(MainForm,3063237,175,98)
{
Width=653
Height=461
link(onCreate,11085202:doWork1,[])
}
Add(StrList,4383086,427,91)
{
Point(EndIdx)
}
Add(ChildPanel,11085202,231,112)
{
link(onEvent2,9222564:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,7878121,21,21)
{
EventCount=2
WorkCount=1
Width=440
Height=270
link(doWork1,12297484:doEvent1,[(46,27)(46,97)])
}
Add(Panel,13137533,56,35)
{
Width=637
Height=30
Align=2
}
Add(Button,294400,42,140)
{
Left=15
Top=5
Caption="New"
link(onClick,12836985:doEvent1,[])
}
Add(Edit,10340021,217,35)
{
Left=185
Top=5
Width=90
Text="1000"
DataType=2
}
Add(Label,13731098,168,35)
{
Left=125
Top=7
Width=61
Height=17
Caption="Кол. строк"
}
Add(LED,11063149,301,49)
{
Left=80
Top=5
Width=20
Height=20
ColorOff=65280
}
Add(Hub,12297484,91,91)
{
OutCount=5
link(onEvent1,3301899:doWork2,[(116,97)(116,83)])
link(onEvent2,3210884:doWork1,[])
link(onEvent4,14611930:doWork2,[])
}
Add(MultiElement,3210884,217,98)
{
link(onEvent1,2339098:doAdd,[])
link(onEvent2,343437:doEvent1,[])
link(Data1,10340021:Text,[])
}
BEGIN_SDK
Add(EditMulti,90280,28,21)
{
EventCount=2
WorkCount=2
DataCount=1
Width=636
Height=158
VOffset=7
HOffset=28
link(doWork1,9486001:doRandomize,[(95,41)(95,62)])
link(doWork2,15286128:doFor,[(39,41)(39,55)])
}
Add(For,15286128,49,49)
{
@Hint=#18:Количество абзацев|
IncludeEnd=1
link(onEvent,9486001:doRandom,[])
link(onStop,90280:onEvent2,[(88,62)(88,158)(603,158)(603,41)])
link(End,90280:Data1,[])
}
Add(Random,9486001,105,49)
{
Max=999999
link(onRandom,131368:doString,[(452,55)(452,111)])
}
Add(FormatStr,131368,469,105)
{
DataCount=3
Mask="%1;%2"
link(onFString,90280:onEvent1,[(580,111)(580,34)])
link(Str1,15286128:Position,[(475,96)(461,96)(461,145)(55,145)])
}
END_SDK
Add(Hub,12836985,91,140)
{
OutCount=3
link(onEvent1,3301899:doWork3,[(123,146)])
link(onEvent3,14611930:doWork3,[(130,160)])
}
Add(HubEx,3301899,119,77)
{
link(onEvent,16463242:doEvent1,[])
}
Add(StrList,2339098,301,98)
{
Point(doSave)
}
Add(DoData,1896552,301,175)
{
link(onEventData,7878121:onEvent2,[(360,181)(360,34)])
link(Data,2339098:Text,[])
}
Add(HubEx,14611930,126,112)
{
Angle=3
link(onEvent,3646847:doStart,[(130,111)])
}
Add(Hub,16463242,238,77)
{
link(onEvent1,11063149:doOn,[(291,83)(291,69)])
link(onEvent2,2339098:doClear,[(291,90)(291,111)])
}
Add(Hub,343437,259,105)
{
link(onEvent1,11063149:doOff,[(284,111)(284,62)])
link(onEvent2,1896552:doData,[(291,118)(291,181)])
}
Add(Thread,3646847,161,105)
{
Delay=20
FastStop=0
link(onExec,3210884:doWork2,[])
}
END_SDK
Add(MST_Virtual,15555683,511,287)
{
MSTControl="MTStrTbl"
Point(doSetVirtIdx)
link(onChangeVirtIdx,4071568:doEvent1,[])
link(VirtualData,14963362:Var,[])
}
Add(MathParse,4883725,392,315)
{
MathStr="(%2 - sign(%1) * 3) * ((%2 - sign(%1) * 3) >= 0)"
ResultType=0
link(onResult,5531226:doCompare,[])
link(X2,15555683:CurVirtIdx,[(405,306)(482,306)(482,334)(517,334)])
}
Add(If_else,5531226,441,315)
{
Type=1
link(onTrue,14213054:doWork2,[])
link(Op2,4383086:EndIdx,[])
}
Add(EventFromData,8915826,252,560)
{
link(onEvent,10994896:doValue,[])
}
Add(For,8901862,749,364)
{
link(onEvent,91022:doRead,[])
link(onStop,8605718:doReset,[(788,377)(788,426)])
link(Start,10721694:Value,[(755,355)(713,355)])
link(End,7765738:Result,[])
}
Add(Hub,4071568,658,287)
{
OutCount=3
link(onEvent1,1165375:In,[])
link(onEvent2,10721694:doValue,[(697,300)(697,314)])
link(onEvent3,8901862:doFor,[(690,307)(690,370)])
}
Add(Math,7765738,756,308)
{
ResultType=0
link(Op2,15555683:PerPage,[(769,278)(552,278)(552,334)(531,334)])
}
Add(Hub,9222564,280,119)
{
OutCount=4
link(onEvent1,4383086:doText,[(410,125)(410,118)])
link(onEvent2,15555683:doResetPage,[(501,132)(501,314)])
link(onEvent3,1551736:doData,[(340,139)(340,195)])
link(onEvent4,971432:doData,[(333,146)(333,244)])
}
Add(MTStrTbl,7148080,329,287)
{
Top=30
Width=617
Height=392
Align=5
Name="MTStrTbl"
Columns=#5:1=100|5:2=500|
VirtualTab=0
SmallIconsManager="icm"
Point(onMouseWheel)
Point(PerPage)
link(onMouseWheel,4883725:doCalc,[])
}
Add(Memory,10721694,707,308)
{
link(onData,7765738:doOperation,[])
}
Add(ArrayRW,91022,805,364)
{
link(onRead,10729404:doEvent1,[])
link(Array,4383086:Array,[(811,152)(447,152)])
}
Add(MT_MultiMem,10994896,301,560)
{
Count=3
link(onData,1592271:doRead,[])
}
Add(PointXY,16351534,350,357)
{
link(X,7148080:CountCol,[])
link(Y,7148080:PerPage,[])
}
Add(LineBreak,6985559,252,602)
{
Type=1
link(Data,8915826:GetData,[])
Primary=[14963362,259,-343]
}
Add(Str_Enum,625405,896,364)
{
From=0
link(onEnum,7441290:doWrite,[])
}
Add(MatrixRW,7441290,945,357)
{
Point(doClear)
link(Matrix,1696896:Var3,[(951,341)(888,341)(888,474)])
link(X,625405:NumSubStr,[(965,348)(937,348)(937,404)(902,404)])
link(Y,8605718:Count,[(972,348)(986,348)(986,460)(902,460)])
}
Add(CounterEx,8605718,896,413)
{
Point(doReset)
}
Add(Hub,10729404,847,364)
{
link(onEvent1,625405:doEnum,[])
link(onEvent2,8605718:doNext,[(872,377)(872,419)])
}
Add(ScrollBar,16623256,399,182)
{
Left=617
Top=30
Width=20
Height=392
Align=3
Kind=1
Point(doMax)
Point(doPage)
link(onPosition,13916000:doWork1,[(494,188)])
}
Add(DoData,1551736,350,189)
{
link(onEventData,16623256:doMax,[])
link(Data,4383086:Count,[(356,138)(440,138)])
}
Add(HubEx,14213054,490,315)
{
link(onEvent,15555683:doSetVirtIdx,[])
}
Add(Hub,15504297,315,406)
{
link(onEvent1,327698:doSize,[])
link(onEvent2,327698:doClear,[])
}
Add(LineBreak,9851605,266,406)
{
link(Out,15504297:doEvent1,[])
Primary=[1165375,441,-119]
}
Add(GetDataEx,1696896,350,469)
{
link(Data,327698:Matrix,[])
}
Add(MT_Add,8097675,469,567)
{
Data=Integer(1)
link(onAdd,8915826:doData,[(584,573)(584,501)(242,501)(242,566)])
link(Data,14096094:Count,[])
}
Add(IconsManager,1695264,672,539)
{
Name="icm"
ImgSize=32
Icons=['Icon'=[ZIP361B000078DAED987B5C54D516C77F0C1830AF73CE3C980106661C85140DED7633ABCF8DEA7EAE5A06A4898A299920E2031F20228A38A8283E01CD4C51C1F11959DD4AA96E5AF8402DDFCF0C4DF06D3E313FD7C747AFE7AE7DCE3033505EEF1F76FBE3B6E0377BEDB5F6DE67CF3E47D6D703F8E031F03C0F66AD7C80546A59D70701486B06CCA198D92CE72F907FF331D697F33BC83F1100D86CAEBC0258C5B1BE9C5F43B9393A5A97AD49A230C5FDA4B155789039A45F381C72C37EC8A9AAAAA2964544E917A22837EC8785E883D6B7DB296687BDA2829C286A2A2A6C88A24FBB5D6AED2C1B55E1A4510AD6675BA249D23478FB8A0A1AC4B26C309BC5FA0A3B5BD1C992B49413F275A44BD28722374614DB73B4117F976E88A2EF5D51F4619B135D1F0E51ACAD12C5BDE4D7B954AF16C57B2F8862E3730A90F6F3A2CF2F4F88BF3211FCC509E02FE581BF900BFE7C2EB873E3C19D259D1907EE740E89DA53D49E1C0BAE8E549B0DED8F63A03D9E056DCD6868BFCF24654073681434074642B37F04347B8743B36738D4BB8641BD93F4ED50A8770C817ADB60A8AAD3A0DA3C0881A5DDA5B3FEC3FEB03FECF7316B0C332B598CCB633299CC1639620DB45A79BDDE640A0D0F67016B33B59AA780D535C5EAAB54729C6B2C9BEBE7A752B9D68A617D7807E42B79AE16F3E0B855A5F2F363DBB37A07ACF255D827C72995BED686A97A3DCFABD5CDA47E7878A8C944012B6D5E1E6B319B4D56F75CAFEF6BCD8D01DA539D81BF4B3700DFBBF43753F42A0F542A6AA9C8EC25BFCEA57A3570EF05B91E5109437BAF7AE4F079F4F548FA43EE2E2C60E543AE33513685549324DFC95CB912C95E85549E98EFB4DBA31A7CCA2BA26C92EF940A94CD1D972E14E59AD750C4ECB6873F480ABB57E9732DA070553FC9B7B912CC77DADC71DA34EDCC6BA30D9B56C89EB46948B5D2A670366CC9261D82E7E2A8A543DA4BF5701B62C42A58499C2CEB34B12AE63CB5B7C42AAAA755FEA2C7EA7CA960FA8AD76EFB8AE7EFF98A27A9AD87ACDBA47B48A6824B8557BC2B36BECF723D2D57FCF218D8BDBA2FDEC7BFEEDF47C4F519B05D2B84ED6A2182AF4C46F0E5C9305DCA87E962BE5C6F59DDFD6902822E38A4DA1B747EA2547F79AFFAAB3F9D0B1DABBF24C3A9F1D09F1C2FD5E2E03A9A57970BF349CAD78D23B1FA9C03E164439DCE81BE96FCDAB1D0D5CA755B2005FD380EC1C7690DAADFC6E334FE5836B8E363201C676D167435D930D4D0F86354DB495C4D1678927094FC1FA8D69338AAF7FAEF297E84EAFE910C180F67C17068348C07297F3803410769FCA14C7087332190F414170E66407B4866042D893B300AE67D349E78C1B82F03DCFE91D0EE97D9C1B42743E287F09D5930EFCA44F0CE0C8925EC3BB2A0D9950E6E673AECDB46C3B29DD6FA2E5DE20BCB36628F6F87C1B09D9863FB1008D5C3A0A1D6543D1CE6ADC311B67904C237D1FA5BD2A0DD3218DCE6C1306C1A02DD37E47F9306E3D78361DA40FD0D8360FAC76068BF4C81B03E19DCBAB711BEE26DD8560C40D8F2FEB02E7F1B5627C59CFD11EA7C0BB6F2FE085996846052487912CCCBFA51DB0FE6F2BE082A7F13C6F23E3096F58165693F18CA12A15FDA1B7A6A0D4B999F0861692FE897F4868EE2862589E097F484B0A4174216BD0953692274A5BD605A4439125FDA13DCE204684B7B805B442A4D00B7B007F88509302C4880E6BDEEE016BC01E3BB09D093D4D4D72C60EA06D5BBDDA02629E7C7434552CF7F9DDAD7A17E875A52E03B71089CCF140FE53BF1089C17076E6E37E84A68EE3C9A33976273E310303716EA626A4B62A12A8E8592A4298A4540F16B08245F35E73528490145A4D95D1130EBD5FFAB7A5A5DFDF7EA5FB74FD64BCDA7927DE5897FF0D7CAEAEA8F3E4A4C4C4C4E4ECFD8B4A9215ED6F6F9CF3F7F45B2EEDD078C1C5DE58ABF6730FC89D9CB2FBFFCD24B3D5286656E94E37334822044463EFB6CE9CCC993F226268D5827C7A70468B55A6BBBCE2BE56EFEDC519F498EE331954AA76BF7BE7B23F39D5293EDA7542A758F3F5FE94EBC2B7D8EF16DE6EFCF99DB775ADBF87B656565391CD38B8B57AFAEA87E24367BF69255ABE88CB66CD9D23851D4BA7534B367B64ADD72CF8C56E13A9D4E19258F9FB7D49D58181114A4D536FF5AEA4C1DB4EC4B39BCBC4307AB55109A7F21777353876F902C3E3E2A2A98EC53399ED367E0D0A16969FDFABDD6B16374B4C9645AE35A766CAF37FBF7EEDDBB4B972ECF3D575C6CB1ACF09CC51B0909B1B1B17F2929A9AE9E11B2D8B3F7F1E3C7171414CC727DC1077CF3E2EAEAFF451D6395F8456F5E51FC06BCF2506BCA142EA871977517D854B899C2053715360F63B861C1BBEF1A20F7195B383D7D769128A737A3B850C80B803CA8D2B0B4BB5FE1B569BB37F0FCD7D67496C2FD0D1468B22D1BBCF0C9054DDEDB8A6201BBE704A218E3799D88A2E24127E484F7001762A161B106CC72EDB6096A796DF53F59C3A3798B74A38E13AF3BD8F3E84302D344524C3D6EC7D4FBDEB7D6FB8B65F4F8D6D6FBD0630CAFE75AA4075F747077E989BF23D671B7275671F7ACE0EE01DC7D92C8E460FF387C8AC47AFFBD34E15AC3CCC6CFB9CC6B0EBF5FEEF3897F9620FCC67484DE9806CB8D4284FC3C1521F505107E9E84906B05E44F45F0D52908B94AB1EBF910AE3139F0F8C5E910AE3A107A7132422E4D96DFA35CCE43F04F935C6C27F39DE927078C24C678860B7912EFB53D5D88274E15BADFB7E8CEE5427F76020C249EB88FF19F7096726789FB48FC190F0FF2676416E449A127E99AA77360A9CB232694DFD1F0A7640EE449E6DA09120B0A2EFE339D207EAC1D07E38971121F32360C3E914B7E361EAF21263D4163880FD9FB1DE14436227F202E3DC1FCB1323392CFF891BDFBE17FCC96DFFF103B9A6A7210744C66493D29B886F6473CC998D24C39BE660CA20FE5C3486CD9EE603E220FE7494CC9DE1D197FC89698B2DD0107428E8C95DE2571DF8F86E9F018D80E8D43D8A11C62CC4C441C18EFE64D8E189327BE0C3B900DCDE151E019671ECC44F37D39125B5AF68F41C87EE258E24E8E9833641F5DEB203127497720131A6A35C49ABAFD19D0ED1BD5883DB5FB8847893F5BEECC8669375D6BCF48707B47C2B26B3431E9088943B57B68DCEEE1D0EC4E879658D4F02D31E60E1AF79DCC9FC28E61306D1F01DDF66110B6A7C3B295AE553D14FA4D43216C1E02CD37A9D06D4C03F7552AF4EB8833D72583FF6C00DA7F908E76154CC3104D6AF3FE10B45A9386D6A48855A988645A9D8A96AB06A2F9CA64D857A6A025C94A6CDA6AF94089512397A7489C6A21452E4B9618356CD95B087126A165F9009896F595199578D552962431AAB9AC2FC25C7CAA23F61416F794D893A7367811B58C3389372D0B12114AD22CEC0ED3FC9EE0E7758330B73B02E6C54ABCA8642246D496C443574CAC592273A2A6385EE2C440E2442571A16E563C02E6748572B6CC88C2AC38083329374BE645ED4C8ACF7C15CA19AF52FB0A026690A6BF0265216BBB20A0B00B5485949F46FEB4CE0898DA194A926A0AF9059DA02CA0764A27044CFADB436BD19D4760350FC9EF3D2B35C724BB7CF95AD3FCB6020A1D3D9ACFACA86851D9CD1B8DF35F3F5F78EEDCE8819D3A758A274BCF2E75361E5069681D1717F714D9EB64292929258D07540A16B227C862637BF4E8913028B5F180CA40A3D1181111F1F4D349DD377CB1FEA30F3B0F6A34A032504F1611D1B5EBEEAD5260EDEACE0BBDF3CD88BE74B63FA71C7487D67EBEF492BBF3899F46A3090AEA70DC7B539B8FB8DD0F7D542A955E1F99DFE864B6BABD95F0F1F1F7F7373C33EDD4AF9EEFAA55159FAD67B679CFE13BBFB17DB9F3C8E97392DDBAF5AB033E0D7B926E465C7474BA27BFDB7BC05A6D68281DA72AFA8AE72CF6780FA86AD122282848D3F6823BB27AEAC9EB9EC53A74B091E9DA9EF14C5939A3ECE64DC93B7A3429A94D9B3674BF9FF2CEF799B6B8ECCA952B7575F903BB76A507C16AB576F4CADF59DE27A778F1E2A2A271F4DF908E64F434C478E769C0B4BC3C7AB452E809A37C8B162D7A35CADF59D137D33161021B41FCFB4C55A5F6C9DAA677A9DF88E4E4E46E645BE9DEAE09DBD7F4E8D6AEFDF8E3CACA8D1BB748BD753B1E722B363D8AFBF97B73CABF012FBC6053],'Icon'=[ZIP361B000078DAED580B5053571AFE2841AD049388CA4B1E22824AA914B4E213B50F5751B12A3ED08A45C52084572021182021208100828F6A421541AD8FB66B1DB6DA966AB1ADBB767666A75D5B9DCE76BAEDD88762BBD5B62A6D2177FF73EF0512106B3BEDECEC6E3FF8F8CFF9FF93734FCEBDC9F77100170C805C2E07C35817208522EBBA6010946E400DE5BCBD85FA156ADF1AC0FA42FD3CB53F1A04040589F5FB806765AC2FD48F50AD6628CDCBE624529AF2127E6C2BFA8381FF85C12004F6438DD6D6568A2CC3F1BFE03821B01F96A23FAED13CE07A4AABD66AD591AE2D2DCD2D2DEAE83E511817DD6F9D8FCDDDE31039C8586736D3C4AE3E564FEAC3C56AAD636B55F85815FC7B57B0607025BA88CBFF09B2F7FF31B19DF6EBFA40A023B0F73E0DE27763964BDF1D6A6AE7D0749BC3FE5B1CF67DC7A1E12687BDDF7268FCC68EFDC467884D37EC68BC6E4703711FD1467D1B452BB1E95F3486B89BB8E76B3B9EFECA8E5DC47A16BFB4632771CF353BEAAEDAB1BDCD8EDA2B766C23EE62F10B3BAA3FEF44DDE71DA8FEAC1395973B61F9B413DB3EED40F9279DA8F8E76D6CFD90F88F1B305DBA81D24BD750FA7E1B4C44C3856B305EB80AC3DFDB50FCEE5514BDD386C2BF5DC116A2F62F97A13D7F1939673F42759D1DF9FA1F1056F92AC654BC8AE0F25710B8F5650411FD4A4FC1D7740A5E2527B121E5167C8D2FC2B3B819F2C213F02D3C0A99FE043C0A8EC3577710D30BEA88B598AEABC534E2F4FC5AF86AF6631AC5A98CDA5AC4686A3185E2E43CAAA9EB3120EB207CB3AD98985509CFCC67109D69816FE64E48D2F6C227BD0E92541B24CA3D906CDA0D49CA2E0CD8B01D928D3BE1B69E6AC9B5903CB50D92240B246B2B2159530ED9934590AC32114BE0BABC08B2C5D918BA380DB24599901315F19B8969902F54512E95B899F2C405E918B23015F2386AC7A56148DC46C8E7537FBE121EF3A93D4F892114A3C69E817BE824FEF9FF1DFF1FE0E6CE5DF1E4BA7599C9C929A9E94ABAF38F868D0B0F0F5F356142F4C393D75262F6A8517E7E7ECBFCFD478F9EB4C6A8E466F9F80C1B366C899F5F70F0C495C5195CEC0886C5C3870786442D2F5271898BBA90B03A7BCB666E86542A7571899379790545C6EB53B9E9EEEEEE00DF7F709E5ECF4D1BECE121912CF0F4F40D1EFFB86E133755CEB040A1081833F691BC0DDCCCC77AB03E2789E34A4BB3B2B24C31A67C42DA3A5A716961A1292626C65442DFE91B3906D314061327C26432CD993387FE720E19B1F76B7CCF928421D2418F0C2EBFBE1E39A15B4C58FB94563B9929146BB7B4B44C23D589716C47DEA52D4C13E39837F737DE70C77CB3C33CD1AC4D0267367A9BCD7CDB7590D987D4CEC4DA887EC8CA148F6FC347543DB66D0AABA87CE0D5B0ABD97F5BD13DBCE739A63DFA18B1C440A28C38F09E789DD84EEC20B2FDB6A3189C917326CDED7C9F053DDD7F5FDF3B7C80F4B4F1B6A0A98DB7045D3D449A7AF0A6A0AD4C639BBE236DA5F6B3DFDA7180D8446C24D693D6D6DF10F495E96C03C5BD5F8B5AFBB5A0AF5D5A6BFDAA476B6DA2D6329DDD41DC794DD0DAED5705DDDD21EAEECEAB1DD871A593D7DD9A2F3A79EDAD22DD65DACB74B7FA723B2C9FDC46E547DFA09C34B7FC832FB1F5521BAFBBA68B6DDDDA6B7AEF2A4ADE6BE3F5D77881B4F8DD2B287E87B4F7AFA4BB7F1634D758D6813CDD0F185F7B166135AD1853FD3A4659CE20B0F20C022A4EC3DF7C1A7EE5AF61B3AA1D5E652D185AF232DC8B4EE2C97537717FC1095E6F67E804BD1DA139C46BAE9BE6055E6B99E6BAE53D477C1E6EB9C788CF6158DE415E83A7883A2C571F809BFA08DC728E60C9B26F291E862CA7096ED9CFC28D74D92DEB10266693B6661EC0248AD2ACFD906434129B20515154EDC7E08C7DB85FB50F9274C606D2ED7DBC7607A6913E6FAE87FF668A4A2BE9B8153ECA5A5EC3997E4B48C7A5C955F04A2C846CA906F2F82CD2E10C5EA3E50B33787D669A3C69DCDBF07C3CF977BDFD5FD2D3FE11FFC4EAD54AA5B23495212FAF3BBF68C243D113274E544D9E3C7946EC2C4341577E6158D828C2BA9090908888D8E2E20A311FE7EB4B8AEC97141414347EFC4CBDA1522BE4E77BF3583972E4C8D0D0E9798595E24CF386F258E5E3E3131232355D5B912F8AE0D2A54BBAF0545A694E85B8A43F0CE1B16CF8F08080D0186579B946CC7BF058A2508C1C19F2B032B342CCCF95F210F293366499CD42FE71F7410CCB583E346A4DBA3947C83FEACE63A9A7A7BFFFD8C815CAADD942FEB115CE284F17DFB0AEAAAA9460B194F2284BE9DAA12D2C6F993D5B2C24766F69514202A5A9909C9C9C9191EB70132C7378587ADD1B8BC5F2088142EFBB665940B0F4BD9B96C5843BE53712EE94E7C1DD0B48C78881441971E03D91748C231DE348C7987BE048C738D22E6712C68AFF13CE72F42BF7FDC67EE58EE8320D828D118C0C73328295A1FE8F82C3A07FA27BF5796BE1D88FFE45FDAECBC7F4AE9B7FEE7CA65EFD983B8E67DB1F4B6CEE75FD68A14FD6C2CCC324F65D59DF9B25C41D8A349BD9D981D91CDDBD83FC198268A9D07396D00572595607AB4465A7010A725E750AE7014EAFFFC9BE42A1B8FBF7603B3589C5C458622051F673D941B4133946037D30DA651C779D9EF38F694F5B5D38BEEFC83ECFB9E0D70C92BEEB3CF83DC79F81343AF8B566F267C76FDA79AF7698DA47C57391068AC7F8BE1D4788CCBFED253EC3478EF76F876E0867265D3EEE2079B703E259C901F26F4DBDFC5C2379B906D1D3312FD7F0A5E8EBC4B393BD0E9EAEEF194A07765FF981BC5CCF594A4D2F4F57455ECEFCE10D982E7C0EE33B9FA1F0FC07D09DFB005BCE5D84EEAD4B28788BC58BC8A776FE9B17A1256ACE527CE37D226BBF8FDC3317A026AA5E7A1BAA3F9D47CAB133BCC7ABA8EE44A1E1478CDF710EE3B69F4358DD5B1853FB264288C1DBDEC4A89A3710440CAC7E0301C42CF5F7185975167E96B3F0A96C8537D1ABA215C3CDAFC373EB690C2D3B0DCFB2D710B0F524824DC7212F7905329EAFC2C3F80A7F46232D3E0969D14B90163643AA3F01E9961711AE6F80B4E038F18F90EA5E8034FF79E2735891F81DA4DA63906A8E128F409A7704EEB987E1AE3E040FF282710BBEC190B43D084EABC243A946441227101F54122946507C601345E2032946C8D6576366EC75C892CA3136498730A27C8D11F2D5062856EA1115FD1514CB0BA048D061C4B23C0C5D9C8DE18BD2F97315E6F3A411B1BF7BBDFF1EBF76EF58BF293D3D2B2B272767770E8FFCFC7CA7FA533153A7CF64A861A664F6BC050B0B9D06AC8D1C27C0FC0081BED0E3F47A9B437DCDA8D0D0310C156C505454D47C9DCEE63043A25FB0808A50424444C463F9F936874BACF20EF4E551CE26090F0F9FABD1D8F4FAEEFACA61FE02CAD824B40456D7E97AEA324F01650101016161610F3E4A7587F7F874498968CD446CB315D9349A9ED70F1928A0CCCBCB6BF4E8D111730CBB9CEA1E8225742F1D316204AD3022566371ACAFB87FF0E0C174B30697D21AF87A5E9EADB6677DCBFBBC3E37D7B6B3BABBBE4CDAEBFA33D46A5B415D777DC900858032DA03B683D332336D0E0EFD093737C1E39A86114242264C51A96CB93DB63221212131716D525252F6C6248664A5526553AB7B6E50427D7DFD1E27186D99999CD300216FED1AB05DA5E29C0608E545DD038CE94ECF18BF066B7C7CBC35855FC386D4BECFA99579D6C5D6FE1E63EB6A01FD0CB0A675E18E0398B7D032B0463F331433F47B7DCE5AC57097FA0E86BBD405FC928FF07FCAA7FC1B8FE28205],'Icon'=[ZIP361B000078DAED58095453571AFE9060151212408A060B1850238AA268A5A8C5AEB6EEAD5571AB3B867D0924AC5988AC0144C5B88BC6A59AB6D37A986A2DD562AD33F6CC39336D6DF574A663DBB1B588ED28DD7466206FFEFBDE03C2A2B53D9D3367E6F8C1C7FDEFFFDFDC7773DF4BBE8F0BB8A12F140A0518D46E403CB5ACEB867ED07800D5941B3850A83751FC635FD617EAE728BED40F080911EB7D804372D617EA87A956ED4BF3B2398994A6BC841FDB88DBC1C4FFC264121AF64341636323B52CC3F1BFE038A1613F2C457FDCA378C0FDB85EABD76B23DD1B1AEA1B1AB4513D5A615CD46DEB7C5BDF310E91AA70872A9426EEE370D8A90F843B42F8C5F6B18BAB665D933BD14D5CFE4F90BDFFCF88ADC1803396D66FECBE4FFDF879A7BAF5DC21FB2D0EF69B1CF6FEC8A1EE070E7BBEE7B0FB3BEA7FEBC42EA2BDC5897DD4EE60ED0D27EA887B883B88DB89DBAED3B8BFD338E256A2ED1B27B61077B2F66B276A89DBAE39B1A9D9898D579DD8D0E4440D710B71C3574E545D69C3C62BADA8FAB20D1597DB60FDA20D1BBE6845E9E76D28FFF4264A3E21FEA505968B2D587FF11AD67FD40C0BD174FE1ACCE7AFC2F441338CEF5F85E1BD66E4FFB1098544FDB9CBD0FFFE32E4CD05C83C7D09DE9FEAE07D3E1DC32BDEC0D0F237A02A3D81E092D711420C5C7F1C4ACB7104141D83D2FC2AFC8CF550141E85B2F008E4054721CB7B05CADC03989C5743DC88C9B93598C4985303A56E2F62A89D4C8CD6D5E0217D0D628813B3A9A6DD0965C676F44D3F80F1E915F04BDB85A8342B9469B59024EDC6A0E48D9024EC8064DD564834DB2089DF82BE6B3641B2B6161EABA9B6AA0692951B20596E856FEE18489EAF80646929E4CB0C902CB2108BE0BEC000F9DC0CC867A741C1382B05DEB312A098990CC58C44621214D335F09EB196DA04C8A653FBB4065EC326F0CFF83DDC8371DAB4B8652B57A6AF5A159F98A2311A8D8F0F1F3172E4C84563C68C9F10FD3C251E1D3244A954CE1B3C3834F4C1A5051AE32383060D1830E039A552A58A5A9893669C7A3FC36C7FFFE0B0710BF2528D8B9F69C7FC2519BA24E3C33299CCCD6DBA3C202024728E3ED138452A95027C7FF4D37ABD71B297A7A7BBFB4C85225015FE64F63AE3245F86993E3E4143D58F69D718639FE8C4EACCE5466361614242424C4C0CFDCD4A5E492B2ECC4D788821213F3F7FAD9147C2C48913138C2E48E8DAA584D8FE1ADFB324618874D12393DBAFAF475DD021262C3EAED74F640AC5E286868649A43AD1AE71E41D62619A68D77CD9EDC69B7ACDD7BBCC13C56244F62B52A9D4657CECDEAFC8E1509759588CA8710E47685454A420760E51F52854391CAAF64E38A962FBDB741943057BE7FBEF13D26367D91E7D86586230514EBCEFAE7883788BD84AE4CC1C9C300AFB4E317786F815C7CFDDF53E0B7ABAB74FCF3BBC9FF474DF4D41530F929EEEFB51D0D6033F08FA6AFFDEC96BEC5E56FB8E74937888B89FB89374B6AE45D0DA9D2D82CEEEBE2E682DD3D9EDD7058D657ABB5DD4D91DDF889A2BEAEC6662ADA8B79B45CDDD44ACBDDA8ACD4D6DBCF6567FD5D6A1BD95A4BB4C7B99EE565DBE05EBE7375171E95B9492E6967EFC354A2E36F3BA6BB920E82EAFBF1F5E45D187CDBCFE9ACF9316BFDF04E37B4DC8FF03E9EEEF2EF1BA2BFF5B0EBCFF9C05EF0FD2207B3709B2D3EB105E731AC3AB1B31B4EA2D0CB19E4270C52904959FC40365271158FA26028A1BE05BF43ABC0CC7D03FEF28AFB74C6BA7103D742FF3DA7BBFEE203CB25F24BEC46B2FD361A6BB03B20FF01AEC91E520BEC8EBB087F63014DAFDF0C83C4C7C01F24C3B3C320EC1239DE660BA9C61C504A2347D2F2469FB2149DD47B44392B20F9EA97BA8DD8BFE29D42633D6916EEFE1B53B3889F43971271E48641ABE9DF47B3BFCD68FC3204D0DAFE34CC325A4E5D2559508585C08F93C1D1473D2058D9E9DCAEBB462562AAFD37E4FAEBAA7C5FF47E06E8F679E5DBC58A3D1142732646777E4E78E191B357EFCF8E4E8E8E829B153CD79EDF939C3860D212C0B0B0B8B88883599CAC5FC6CA5F201C2AA90909011231E2E345BF5427ED6201E4B020303D5EAC9D9055671A6997E3C960E1C38302C2C26555F9E23E4D7CF9F3FAF1DCB938AB5E5E2926678F158E8EF1F14A49EA8292DD58979298F793E3E8181610F6AD2CAC5FC746F1E427EC2DAF48A0A21FFB4AC3FC34296578F5B915AA115F2D3643CE62B1483070F8F5CA029CB10F24F2DE88AD254F10DE7565616171B7814134AE2DB77289FE59F24F0F9E2451D5B6A8C8B3330C36058B3664D4A4A96EB5D303C4E3074BF3734F563046ABA171EE5D1E3059CE11182A197DB6CE83DCDAEC1DD1D48C788C14439F1BEBB22E918473AC6918E71A45D1CE918C72B17C5A4631CE9180FB5F83FE15457BFD2E73FEC577A45BB69106C8C6064989311AC0CF5FF25380CFA27BA5B9FB716AEFDA85FD46FBF7C74F77AD9CF9DCFD2AD1FDDEB78B6FDB1C4FA6ED78F12FA642DCA7858C4BE3BCAC849A92821EE506419B9293B8D68DF31E6A8EC51ED964A704C2E36092A72567655A759A272D701E4B61CAE5EAADBEB3BCF263A06D8BBDDC5909FF81EBC4521D1488C250613E53F97AD4427916334D107E3969CE31ADDE883427B7A839E77D66F0DA6879E6DAFB197E75CF06B2649CF751EF807C79F8130CFD6EED55EF9C1897AF2692F885EED30B5CCBB1DA1F608F5EB880E8A777FE7E4CF4A76891EEE608B7066C27CDC7EF26C076E747AB9FDD785F312E6E5EC14D79187DB279E99305FC7FCDD16D1CBD57D2DF8B9DDD784F3935AD1D7B59FA108E727ADFC59CAD6A67FF25EAE5AF473D557043F57297ABA4AF272659FB4C072FE0ACCEF7D89C2731F23F7ECC7C83F7B01B9EF305E440E318F62E6DB72CE5C809EF1ED8F8817A03BCDF811B24E9D879628BF9C0BEFBF6623E5B57791F2DB73F0BE9001D99F5211EF3805D9B924846F3E8B119BCE62F8C67730B4E60CC288AA0D671052FD36861083ABDE46107170E569045A4F63604523061103CA1BE15FF616FC4A4EC2AFF84DF8169F4450C931288A4E405EF406F10464E613901A8F416A780DD2C27A480B8E429AFF2A4616D4419AF70AF13790E6BE0C69CE4BC41721D53B20D51D211E8634FB30BCB25E8097F62064E403BD93B641955489B109668C214612476BCC88208EA678D43A8A89A3E2CD90AFAE827C79297F0E337C792ED444C55233144B4CF0892B80CF823CF8CCCFC5FDCF65C3776E06FC670BBE4E1A117BCFDBFDEFFAB5BB47BC2639393D3D3333B3369307895897FAEAE898C90F3354C5324C9FF36C4197012B23C305948C24D017FAECFC7C9B4BFDF9A061C3C2184AD9A0B163C7CEC8C9B1B9CCB04C1922A07418212222E229BDDEE67289A501AA401EEBD924A3468D9AA6D3D9F2F33BEA8BFD060BB0B0496809AC9E93D359F7F51760213FAA56ABC73C417597F7B8D96432F3B088A8B415DA74BACED7F7EF27C0421E34343434E211C3A62E752FC112CACCE45F99DD9DAA2B77AD2F917A7A7AD2CDF234D31AF87A76B6ADBA737D8B7ABC3E2BCBB6B1A2A3BED0BBDBF5A768B5B6DC0D1DF5F91E3E022CB4076C0727A5A5D95C1CFA737DFB0A1EB78819E9A143473F949262CBEAB495717171CB96AD5CB16245C6BA150C6B1213536C5A6DE70D8ADBBA75EB962E30DAD2D2B82E03286915C00FA84949E1BA0C6075DEAB5BC51992BB3C636C0D56FEDCCDCAAF616D42CFE7D43A97C1DAFB43CCAE3C8B8105BD0E98D98EDBCDF09800EBED3E27D63B978501D63B7DD2AC772ED3805FF811FE6FF9947F033BBB572C],'Icon'=[ZIP361B000078DAED970954536716C7FF102562A30961AF4A202A4A110533D84844880B28236E88DA2A6255A82CE25695804230B881226A41318A08B82BB5556A35B68D5B45DBDACD6AED50DB8EB675E94CAD7661AA2673BFF75E4C70E971E67466CE99E31F7EDCEFDEFBBD95977CFF0738C10532990C4C5D9D80548A2C75422B4C6D099450CDC787EF5FA1F12F2E2CE7FB0D34BED80AF0F717FACEC05629CBF9FE76EA95C869BF6C9F0495A9DE829B6BC6A3A4E77EA1D7F381FDD0C06C365364152BF70BAB950FEC8795D81FBB9CFDF9A854D21F95AAA75249058DE935E521258BCA6053B53FC57D265384928FEA6A7F15D3D208259F870A753D9AE7F628E236086507E0223B054B3E70278A0EAA20E85E404C88B80BE7257E103D6116DF7F9F5A71D3A39D1EBC43354D566CFED58A6AA2EA171A13553F5BB189A8FDC98A1A6213172DA8BE65C15662C34D0B8C8C1F2D584F54DEB0A08AE2861F2CA8A0F13A8AC6BF5BB09628FB9B05E5C4CBDFD39878F93AE5D7EF1277B0EAAA056BAEDDC66A62CD350B565FBD8D95DF595072B9092B2E35A1E8E24D147F79134B2F7C8F259F5D27AE61D1F9EB309CBD8AFC339730FEF58F30FBD86CCC3C3613715B4F23DD9C8E415B4E2376CB290CAC6940FFEA064C3A3C09D19B4FA2EFA613483625A34F25C5D793D1DB7814CF961D42E4EE48F4DFDE1FDA6D5A745BB4039A2D1A742EAC43E745750824FA6EEA8BF6F9AFA01DE19B57071F22BA221A5EF3F7C07BC11E785254D62A11B6310CEEB9BB1150130079CE2E04E46C86A24A0179F676F4C929455FA24FCE2A443274A5D0104F6F7A1A7E1BFDD0AEB21D22B24B11511A81DEF34A217DA916D259D55097A8D1ABA417E446397A96F4845FB91FA433ABE0B6DE0D1E33D6433AA312E1B38A219DBE01EEE5EEF02CF384BC5C8EB66BDBA2EDB4F5702B7343DBCC0A88D32AE032B914EE8BDDE196B400EDB3DBA34D6E1B788CD6413E7236E4C3A61359900F654CBBFFF97FA2FF63591FAE8CBC66E998D9B90BF85162624A4A4AF2B4698346A6737942E7AE414113E7CCEAAE193095E5C3FDFCFC46A5CD5328BAABFA4DA67CA83B6982AFAF22243B54FBA2D53A4C4E9AE0E9A9EC36B730AC5FBC35FF795E5366E80BB3D591D1435A91C649A5ED9E99593897B6FFB398C4F2A0E90603E571125757D7E764B2A7BB641A66523E58424A7273EB1098B2703AE551FE01010153023A76ECD8A320939D50FF5852560C69BE8E3BE33F919E1DDDBB779FBE39C2D559F2ADD63B51F4D02B08292126448413BF1A70F97DE80933C1BE67690943A8C37AA477FA8FAE4782940E2B94D2DF5E562AED656EA9E2D6966A25DF10994CA66A6570356BB0F1CE9DA643ACC1C61A93691F6BD8C611D4B08DD5D4E0D728955A4D0D5B7D29EDF9DE1C957D3F6A83C358ED306673D8FFC96ABDC5C66045EA7163E1002A36B635B8B1C8A1FEC8E718D65BC4D78499D0E7D3DD8D22148494101322C249B8F710EACD31135F1137882682DB2FD1FCFFCCAFA755CE4FD6D327EBE993F5F489EC5AFC18CACB7B44F9A10DAAE6E63ED89893376F847640FABDC690446E699E93913142AB09D3DE6B0C09EC12141C1C3C42ABD54677D784F5CB101A43FCFDDB934652B953A7EE1AD500A111E7E1E14B9A443DAAEBB41AA131D89DD3241F1F1F852244A7D3AAF9468C1BA709DEDEDE544FD5156AD5D1ECE0F39392C6D9448BBBAE50A751458E7C6971CC539C68096FD74E11925250A0D36934DA11B6FA38998C0E10929259A8D371E713D39A135FEF96926A3008756604382B40F52E54D719B87A948453925CEEE5A50C4C4C3108FB895DC429890F898905A9A9FC8DC81236E0434E418A505F9CD45C8989B65BDD7C0B7B7D71CCD8B163530465664E5FFC6F883324B788AF0933A1CFB7D23A4628082921264484130101E903D03A66A575CC4AEB98B589991A415D8577C26847BFE2FCDFF02B0E2FD18ECEC5C1BAF0EE45D9BC6D9BC05900A5F2DE04B207F40AAEA497707E4214676CD8CB383F41C84D26614214677682F9AA903347C2DEDAD9047BAEE22638E4456C82436EA8BE2F0F85F0DECEC9C0E5F6BEFABE5C757FBEF4FEBEFEF7E73F5E6EE55D96F5369F330366CAB5F7B91B7880E5FBF85C34CF2655289A4F0885A3095309FDC778AFA0E7CE4226F90E39BE26277A1EC99A01F94414A120A4849810114E028AC785F6A7B841341177080B98837FD873CEFB357D8B07CFF3A3DFAC384B9C21DE27DE63F11F1489779B18167C489C264EFD6A41C32F16D452AFE1670BE7F54E523C495EEE04F373E4F94EFD749BF37FCCFB35DCBA8DCA9F78EFC73CDF919B77B181FC9EF9C73BD8487123F9D5E33FFEC6F93FE6FB38FF7783F77C153FF0BECFD1F3717E8F58739DF77DABAF59389FC77CDF6AA2F48A052B19CCF371DC45C9B777B182F1CD5D2CBF7C17C544DD25F2815FDCC49A4FAE60E1C7DF22F79D0BC839711ED9C7CF4177FC3C710EF38E1147CF61EE91739863FE1459A6CF9179E80226BFF10526ED3F87A457CF62FCDE4F90B0EB43C46F3B8334731A52CDA988AAF918B1B5EFE185B75EC0C4B72722F5702A22AA3E40E4C6068C338DC398436330EAE0288C3E381A09871230FCE0700C3B380CF16FC46378FD70C41D88435C7D1C62EB6311B4FA0406D60F44E0AAE318FCDA6074A6D87F7F7F28571E43F4BE68742D3523A0E428FC89F85DF150AC380A3FA2FDF223F0293E8E88BD11F02D32C36BE9DB08AF0BC7C0ED03A1DAA342E4F648C80C2684902FEDBDB53782770643B55585901D2108AF0D479B828308DA110455AD0AEACD6AB4D11F8024FF75B42102B7054292578F3679FBD1695B274816EC8364FEAB90E4EE855FAD1FFC6AFCA0A8514092F30A5107896E0F24D9BBD1367B174562EE0E046C08409759E5F05DEB4BD7D499FC6625641532F894F940B94A098FB51E101BC5904E33A2E5FA966851D102D28C0A622DDA66AC438B7594A7AF25CA214D2B833ABD001D8A3B403A750D9CD738A3FBD40288568B1042D1B7C8173ECB7C202991A0DB8B050821BC9779C36B9917BAA516C075B92B5C8B5CD17A596B888A45F05EE80D69F2127449D6018BE8C36910A3E5C296702970816C1C7D31D17B1D1602329D8C3EC980DBD8F970CE7386F3025A44E6D337768E33BC46CD016873E6853197E6530A1A8A6788E1393413E22C315CB25C80E980677C069005B44AA7CF6826E03138151E8352E01E3B19EE31938029B46D32319648C01FEEA5ADFFA23EB974E5D2EFB43FF8F2EAF5EB5F3FB2FDFED9D3FBF79FF9EBE78F68BFF7F1913D1B7397BEF6C505C76ADEB2D2D2D272D2C98FCC3BCA72268E5CF0C6458709BABED1DA814CC74E1DDAFEF2E29583934717BEE93021BB43584FA6EA9A9AADCB0BD6444444A48E5FF2967DC21C79680893217D72CABC95BD983227384C78C9AD1BA7F913276615705FFF9A4134E1CD8B9FF1FDD9B2204187B9FD8487870F32668E2F3CF897735C7F66DBAE820E77E7D4AB57ACD138759CBEF67803D797746162FD60263A408CB1B4714A42C2ACAAA3ACFF54E74EBC0E3CC314161616635CD1F8CAA431490BB7B07E6B65475EF5DC517AF4E8D1DF58DC586714CEFFD357EBED3ACCE99DEFD6DBFB335B2904D50792E84A5503767FF895BD2FF61154CF4E829D623FE3BE6FECFD96BE5E9CDAD7931DE1CEB09FB1E4F2E50DB6BEC8CB939382F595749FA85FDC78FE84D09F21F2B4F5D945B01BD9AFA2B871EFBB427FDA43FAEB1CAE2FCDF981BEB67C59E32E5BFF453C70FCE8550EFD3427A6162E2E2E95BCD596CBFBCE5DD4B8ABC2F6804C7315343CDE5F180D59D4B873DDBD272C5FA87A0C4DF41686CF356E2BB73FA26971829E9F3E4C18656C5EE5F08817D90E11352252188D2A72FC0C143D44D63F4EFF3B9FF24FF51A0992]]
}
Add(Hub,14741939,427,560)
{
link(onEvent1,14096094:doNext,[(452,566)(452,524)])
link(onEvent2,8097675:doAdd,[])
}
Add(CounterEx,14096094,469,518)
{
Max=3
}
Add(DoData,971432,357,238)
{
Data=Integer(0)
link(onEventData,13916000:doWork2,[])
}
Add(HubEx,13916000,490,238)
{
Angle=1
link(onEvent,14213054:doWork1,[])
}


Редактировалось 2 раз(а), последний 2020-11-29 17:17:21
карма: 15

0
Ответов: 207
Рейтинг: 14
#15: 2020-12-01 14:44:59 ЛС | профиль | цитата
Gunta, Да, разобрался. Спасибо за помощь.
карма: 2

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