Вверх ↑
Этот топик читают: Гость
Ответов: 687
Рейтинг: 142
#46: 2020-11-30 14:53:01 ЛС | профиль | цитата
nesco писал(а):
А ты не пробовал перечитывать страницы при изменении высоты таблицы?

Пробовал. Не пойму, где я делаю ошибку? Самое интересное что этот индекс всегда "упирается" в размер, который был выставлен во время редактирования в "редакторе форм" и не зависит от того сколько целых строк помешается в таблице при работе. Если в редакторе форм изменить высоту таблиц и откомпилировать, то и максимальный индекс изменится, но он не меняется во время работы программы.
Add(Matrix,327698,588,182)
{
MatrixType=2
Point(Size)
link(Size,16351534:Point,[])
}
Add(MatrixRW,1592271,588,448)
{
Value=String()
Point(doClear)
link(onRead,8915826:doData,[(634,454)(634,433)(473,433)(473,454)])
link(Matrix,6724999:Var2,[])
link(X,10994896:Value3,[(608,439)(558,439)(558,492)(538,492)])
link(Y,8411600:Var,[(615,439)(629,439)(629,509)(531,509)])
}
Add(MainForm,3063237,105,280)
{
Width=651
Height=430
link(onCreate,11085202:doWork1,[])
}
Add(StrList,4383086,322,280)
{
Point(EndIdx)
Point(doGetString)
Point(onGetString)
link(onGetString,625405:doEnum,[])
}
Add(ChildPanel,11085202,161,294)
{
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=635
Height=30
Align=2
}
Add(Button,294400,42,126)
{
Left=15
Top=5
Caption="New"
link(onClick,12836985: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=290
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(onEvent4,14611930:doWork2,[])
}
Add(MultiElement,3210884,217,98)
{
link(onEvent1,2339098:doAdd,[])
link(onEvent2,11063149:doOff,[(284,111)(284,62)])
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,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,1516465:Var3,[(167,40)(146,40)(146,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)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,90280:onEvent1,[(508,104)(508,34)])
link(Str1,15286128:Position,[(475,89)(461,89)(461,138)(55,138)])
link(Str3,1516465:Var2,[(489,82)(349,82)(349,124)(111,124)])
}
Add(GetDataEx,1516465,105,84)
{
link(Data,9486001:Random,[])
}
END_SDK
Add(Hub,12836985,91,126)
{
OutCount=3
link(onEvent1,3301899:doWork3,[(123,132)])
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,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(Thread,3646847,161,105)
{
Delay=20
FastStop=0
link(onExec,3210884:doWork2,[])
}
Add(Edit,12435698,291,228)
{
Left=475
Top=5
Width=90
Text="Поиск"
DataType=2
link(onEnter,7878121:onEvent1,[(340,241)(340,27)])
}
END_SDK
Add(MST_Virtual,15555683,469,539)
{
MSTControl="MTStrTbl"
Point(doSetVirtIdx)
link(onChangeVirtIdx,4071568:doEvent1,[])
link(VirtualData,8915826:GetData,[])
}
Add(MathParse,4883725,273,567)
{
MathStr="(%2 - sign(%1) * 3) * ((%2 - sign(%1) * 3) >= 0)"
ResultType=0
link(onResult,5531226:doCompare,[])
link(X2,9756559:Var1,[(286,558)(370,558)(370,607)])
}
Add(If_else,5531226,322,567)
{
Type=1
link(onTrue,14213054:doWork2,[])
link(Op2,4383086:Count,[])
}
Add(EventFromData,8915826,469,448)
{
link(onEvent,10994896:doValue,[])
}
Add(For,8901862,574,560)
{
link(onEvent,7765738:doOperation,[])
link(End,15555683:PerPage,[(587,551)(566,551)(566,586)(489,586)])
}
Add(Hub,4071568,518,539)
{
link(onEvent1,1592271:doClear,[(564,545)(564,468)])
link(onEvent2,8901862:doFor,[(557,552)(557,566)])
}
Add(Math,7765738,630,560)
{
ResultType=0
link(onResult,4383086:doGetString,[(669,566)(669,335)(312,335)(312,314)])
link(Op1,9756559:Var3,[(636,551)(622,551)(622,607)])
}
Add(Hub,9222564,210,301)
{
OutCount=3
link(onEvent1,4383086:doText,[])
link(onEvent2,1551736:doData,[(290,314)(290,356)])
link(onEvent3,15504297:doEvent2,[(249,321)(249,223)])
}
Add(MTStrTbl,7148080,567,49)
{
Top=30
Width=615
Height=206
Align=5
Name="MTStrTbl"
Columns=#4:1=50|5:2=500|4:3=59|
VirtualTab=0
Point(onMouseWheel)
Point(PerPage)
Point(onResize)
Point(Width)
Point(Height)
link(onMouseWheel,171554:doWork2,[])
link(onResize,15504297:doEvent1,[(627,90)(627,105)(508,105)(508,216)])
}
Add(MT_MultiMem,10994896,518,448)
{
Count=3
link(onData,1592271:doRead,[])
}
Add(PointXY,16351534,588,126)
{
link(X,7148080:CountCol,[])
link(Y,7148080:PerPage,[])
}
Add(Str_Enum,625405,616,287)
{
From=0
link(onEnum,7441290:doWrite,[])
}
Add(MatrixRW,7441290,665,280)
{
Point(doClear)
link(Matrix,6724999:Var3,[(671,243)])
link(X,625405:NumSubStr,[(685,271)(657,271)(657,327)(622,327)])
link(Y,8901862:Position,[(692,271)(706,271)(706,600)(580,600)])
}
Add(ScrollBar,16623256,399,343)
{
Left=615
Top=30
Width=20
Height=361
Align=3
Kind=1
Point(doMax)
Point(doPage)
link(onPosition,14213054:doWork1,[(445,349)])
}
Add(DoData,1551736,343,350)
{
link(onEventData,16623256:doMax,[])
link(Data,4383086:EndIdx,[])
}
Add(HubEx,14213054,441,567)
{
link(onEvent,15555683:doSetVirtIdx,[])
}
Add(Hub,15504297,546,210)
{
InCount=2
link(onEvent1,327698:doSize,[(564,216)(564,188)])
link(onEvent2,171554:doWork3,[(662,223)])
}
Add(HubEx,171554,658,77)
{
link(onEvent,8308093:In,[])
}
Add(Debug,8411600,525,490)
{
LogCount=100
link(Data,10994896:Value2,[])
}
Add(GetDataEx,9756559,469,602)
{
link(Data,15555683:CurVirtIdx,[])
}
Add(LineBreak,1186977,224,567)
{
link(Out,4883725:doCalc,[])
Primary=[8308093,448,-490]
}
Add(GetDataEx,6724999,588,238)
{
link(Data,327698:Matrix,[])
}


Редактировалось 4 раз(а), последний 2020-11-30 15:54:01
карма: 15

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#47: 2020-11-30 17:39:12 ЛС | профиль | цитата
Gunta писал(а):
Самое интересное что этот индекс всегда "упирается" в размер

Самое интересное, что в твоей схеме почему-то все упирается в значение 12? В основном примере с базой такого не наблюдается, там если изменить размер, а потом нажать Ctrl-End и Ctrl-Home то строки впишутся точно в таблицу. Почему-то в твоих схемах на страницу грузится только половина строк.

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

0
Ответов: 687
Рейтинг: 142
#48: 2020-11-30 18:02:16 ЛС | профиль | цитата
nesco писал(а):
твоей схеме почему-то все упирается в значение 12

В том то и дело, если в редакторе форм выставить другой размер, то и упираться будет в другое число.
И максимальный индекс будет другой. И не будет завесить от фактического размера таблиц.
Add(Matrix,327698,602,154)
{
MatrixType=2
Point(Size)
link(Size,16351534:Point,[])
}
Add(MatrixRW,1592271,602,420)
{
Value=String()
Point(doClear)
link(onRead,8915826:doData,[(648,426)(648,405)(473,405)(473,426)])
link(Matrix,6724999:Var2,[])
link(X,10994896:Value3,[(622,411)(572,411)(572,464)(552,464)])
link(Y,8411600:Var,[(629,411)(643,411)(643,481)(545,481)])
}
Add(MainForm,3063237,119,252)
{
Width=651
Height=550
link(onCreate,11085202:doWork1,[])
}
Add(StrList,4383086,336,252)
{
Point(EndIdx)
Point(doGetString)
Point(onGetString)
link(onGetString,625405:doEnum,[])
}
Add(ChildPanel,11085202,175,266)
{
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=635
Height=30
Align=2
}
Add(Button,294400,42,126)
{
Left=15
Top=5
Caption="New"
link(onClick,12836985: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=290
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(onEvent4,14611930:doWork2,[])
}
Add(MultiElement,3210884,217,98)
{
link(onEvent1,2339098:doAdd,[])
link(onEvent2,11063149:doOff,[(284,111)(284,62)])
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,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,1516465:Var3,[(167,40)(146,40)(146,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)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,90280:onEvent1,[(508,104)(508,34)])
link(Str1,15286128:Position,[(475,89)(461,89)(461,138)(55,138)])
link(Str3,1516465:Var2,[(489,82)(349,82)(349,124)(111,124)])
}
Add(GetDataEx,1516465,105,84)
{
link(Data,9486001:Random,[])
}
END_SDK
Add(Hub,12836985,91,126)
{
OutCount=3
link(onEvent1,3301899:doWork3,[(123,132)])
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,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(Thread,3646847,161,105)
{
Delay=20
FastStop=0
link(onExec,3210884:doWork2,[])
}
Add(Edit,12435698,291,228)
{
Left=475
Top=5
Width=90
Text="Поиск"
DataType=2
link(onEnter,7878121:onEvent1,[(340,241)(340,27)])
}
END_SDK
Add(MST_Virtual,15555683,483,511)
{
MSTControl="MTStrTbl"
Point(doSetVirtIdx)
link(onChangeVirtIdx,4071568:doEvent1,[])
link(VirtualData,8915826:GetData,[])
}
Add(MathParse,4883725,287,539)
{
MathStr="(%2 - sign(%1) * 3) * ((%2 - sign(%1) * 3) >= 0)"
ResultType=0
link(onResult,5531226:doCompare,[])
link(X2,9756559:Var1,[(300,530)(384,530)(384,579)])
}
Add(If_else,5531226,336,539)
{
Type=1
link(onTrue,14213054:doWork2,[])
link(Op2,4383086:Count,[])
}
Add(EventFromData,8915826,483,420)
{
link(onEvent,10994896:doValue,[])
}
Add(For,8901862,588,532)
{
link(onEvent,7765738:doOperation,[])
link(End,15555683:PerPage,[(601,523)(580,523)(580,558)(503,558)])
}
Add(Hub,4071568,532,511)
{
link(onEvent1,1592271:doClear,[(578,517)(578,440)])
link(onEvent2,8901862:doFor,[(571,524)(571,538)])
}
Add(Math,7765738,644,532)
{
ResultType=0
link(onResult,4383086:doGetString,[(683,538)(683,307)(326,307)(326,286)])
link(Op1,9756559:Var3,[(650,523)(636,523)(636,579)])
}
Add(Hub,9222564,224,273)
{
OutCount=3
link(onEvent1,4383086:doText,[])
link(onEvent2,1551736:doData,[(304,286)(304,328)])
link(onEvent3,15504297:doEvent2,[(263,293)(263,195)])
}
Add(MTStrTbl,7148080,581,21)
{
Top=30
Width=615
Height=481
Align=5
Name="MTStrTbl"
Columns=#4:1=50|5:2=500|4:3=59|
VirtualTab=0
Point(onMouseWheel)
Point(PerPage)
Point(onResize)
link(onMouseWheel,171554:doWork2,[])
link(onResize,15504297:doEvent1,[(627,62)(627,76)(550,76)(550,188)])
}
Add(MT_MultiMem,10994896,532,420)
{
Count=3
link(onData,1592271:doRead,[])
}
Add(PointXY,16351534,602,98)
{
link(X,7148080:CountCol,[])
link(Y,7148080:PerPage,[])
}
Add(Str_Enum,625405,630,259)
{
From=0
link(onEnum,7441290:doWrite,[])
}
Add(MatrixRW,7441290,679,252)
{
Point(doClear)
link(Matrix,6724999:Var3,[(685,215)])
link(X,625405:NumSubStr,[(699,243)(671,243)(671,299)(636,299)])
link(Y,8901862:Position,[(706,243)(720,243)(720,572)(594,572)])
}
Add(ScrollBar,16623256,413,315)
{
Left=615
Top=30
Width=20
Height=481
Align=3
Kind=1
Point(doMax)
Point(doPage)
link(onPosition,14213054:doWork1,[(459,321)])
}
Add(DoData,1551736,357,322)
{
link(onEventData,16623256:doMax,[])
link(Data,4383086:EndIdx,[])
}
Add(HubEx,14213054,455,539)
{
link(onEvent,15555683:doSetVirtIdx,[])
}
Add(Hub,15504297,560,182)
{
InCount=2
link(onEvent1,327698:doSize,[(578,188)(578,160)])
link(onEvent2,171554:doWork3,[(676,195)])
}
Add(HubEx,171554,672,49)
{
link(onEvent,8308093:In,[])
}
Add(Debug,8411600,539,462)
{
LogCount=100
link(Data,10994896:Value2,[])
}
Add(GetDataEx,9756559,483,574)
{
link(Data,15555683:CurVirtIdx,[])
}
Add(LineBreak,15759519,238,539)
{
link(Out,4883725:doCalc,[])
Primary=[8308093,448,-490]
}
Add(GetDataEx,6724999,602,210)
{
link(Data,327698:Matrix,[])
}


Редактировалось 3 раз(а), последний 2020-11-30 18:05:44
карма: 15

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#49: 2020-11-30 18:10:06 ЛС | профиль | цитата
Gunta писал(а):
В том то и дело, если в редакторе форм выставить другой размер, то и упираться будет в другое число.

Ну эта схема у тебя нормально отображает, почему в той 12, хотя в таблице 24?
карма: 22

0
Ответов: 687
Рейтинг: 142
#50: 2020-11-30 18:12:00 ЛС | профиль | цитата
nesco, попробуй изменить размер формы окна и будет понятно в чём проблема.
Количество загруженных сток никак не зависит от размера таблицы в работающей программе. Оно зависит от того какой размер был в окне редактора форм до компиляции.

--- Добавлено в 2020-11-30 18:50:19
Количество выводимых строк зависит от свойства Height в компоненте MTStrTbl до компиляции. Просто, меняя высоту, меняем и количество строк.

Редактировалось 5 раз(а), последний 2020-11-30 18:56:27
карма: 15

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#51: 2020-11-30 18:50:40 ЛС | профиль | цитата
Gunta писал(а):
Оно зависит от того какой размер был в окне редактора форм до компиляции.

Это явно наблюдается только при увеличении высоты таблицы больше изначального количества строк. Только тогда я понял в чем прикол. При первом пуске добавляется N-е количество пустых строк по высоте таблицы, затем можно только очистить данные, а вот добавить их уже нельзя. Я подумаю, как можно исправить это недоразумение.
карма: 22

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#52: 2020-11-30 22:47:18 ЛС | профиль | цитата
Замени код в компоненте MST_Virtual вот на этот

unit hiMST_Virtual;

interface

uses Windows, Kol, Share, Debug, hiMTStrTbl;

type
THIMST_Virtual = class(TDebug)
private
FMSTControl: IMSTControl;
DefPage: integer;
Page: integer;
FVirtIdx: integer;
oldPerPage: integer;
procedure InitPage;
procedure SetPage(Value: integer);
procedure SetMSTControl(Value: IMSTControl);
procedure _OnLVData(Sender: PControl; Idx, SubItem: Integer; var Txt: String; var ImgIdx: Integer;
var State: DWORD; var Store: Boolean);
public

_prop_SubItemName: byte;
_data_VirtIdx,
_data_Page,
_data_VirtualData: THI_Event;
_event_onChangeVirtIdx: THI_Event;

property _prop_MSTControl: IMSTControl read FMSTControl write SetMSTControl;
property _prop_DefaultPage: integer read DefPage write SetPage;
procedure _work_doNextPage(var _Data: TData; Index: word);
procedure _work_doPrevPage(var _Data: TData; Index: word);
procedure _work_doSetPage(var _Data: TData; Index: word);
procedure _work_doResetPage(var _Data: TData; Index: word);
procedure _work_doInitPage(var _Data: TData; Index: word);
procedure _work_doSetVirtIdx(var _Data: TData; Index: word);
procedure _var_CurPage(var _Data: TData; Index: word);
procedure _var_PerPage(var _Data: TData; Index: word);
procedure _var_CurVirtIdx(var _Data: TData; Index: word);
end;

implementation

procedure THIMST_Virtual.InitPage;
var
i, j: integer;
sControl: PControl;
ColCount, defPerPage: integer;
begin
if not Assigned(FMSTControl) then exit;
sControl := FMSTControl.ctrlpoint;
sControl.BeginUpdate;
ColCount := FMSTControl.clistcount;
if (sControl.Count <> 0) and (FMSTControl.clistcount <> 0) then
begin
if sControl.LVPerPage > oldPerPage then
begin
for i := 0 to sControl.LVPerPage - oldPerPage - 1 do
sControl.LVItemAdd('');
end
else if sControl.LVPerPage < oldPerPage then
begin
for i := sControl.LVPerPage to oldPerPage - 1 do
sControl.LVDelete(i);
end;
for i := 0 to sControl.LVPerPage - 1 do
begin
sControl.LVItemImageIndex[i]:= I_SKIP;
for j := 0 to ColCount - 1 do
sControl.LVItems[i, j] := '';
end;
oldPerPage := sControl.LVPerPage;
end;
sControl.EndUpDate;
_hi_onEvent(_event_onChangeVirtIdx, FVirtIdx);
end;

procedure THIMST_Virtual.SetPage;
begin
DefPage := Value;
Page := Value;
end;

procedure THIMST_Virtual.SetMSTControl;
var
sControl: PControl;
l: TListViewOptions;
i: integer;
begin
if Value = nil then exit;
FMSTControl := Value;
sControl := Value.ctrlpoint;
l := sControl.LVOptions;
if (lvoOwnerData in l) then
begin
sControl.OnLVData := _OnLVData;
for i := 0 to sControl.LVPerPage - 1 do
sControl.LVItemAdd('');
end;
FVirtIdx := Page * sControl.LVPerPage;
oldPerPage := sControl.LVPerPage;
end;

и попробуй вот эту схему

Схема

Add(Matrix,327698,896,301)
{
MatrixType=2
Point(Size)
link(Size,16351534:Point,[])
}
Add(MatrixRW,1592271,896,567)
{
Value=String()
Point(doClear)
link(onRead,8915826:doData,[(942,573)(942,552)(767,552)(767,573)])
link(Matrix,6724999:Var2,[])
link(X,10994896:Value3,[(916,558)(866,558)(866,611)(846,611)])
link(Y,10994896:Value2,[(923,558)(937,558)(937,628)(839,628)])
}
Add(MainForm,3063237,224,399)
{
Width=651
Height=550
Point(onMouseDown)
link(onCreate,16430040:doEvent1,[])
}
Add(StrList,4383086,511,399)
{
Point(EndIdx)
Point(doGetString)
Point(onGetString)
link(onGetString,625405:doEnum,[])
}
Add(ChildPanel,11085202,322,413)
{
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=643
Height=30
Align=2
}
Add(Button,294400,42,126)
{
Left=15
Top=5
Caption="New"
link(onClick,12836985: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=290
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(onEvent4,14611930:doWork2,[])
}
Add(MultiElement,3210884,217,98)
{
link(onEvent1,2339098:doAdd,[])
link(onEvent2,11063149:doOff,[(284,111)(284,62)])
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,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,1516465:Var3,[(167,40)(146,40)(146,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)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,90280:onEvent1,[(508,104)(508,34)])
link(Str1,15286128:Position,[(475,89)(461,89)(461,138)(55,138)])
link(Str3,1516465:Var2,[(489,82)(349,82)(349,124)(111,124)])
}
Add(GetDataEx,1516465,105,84)
{
link(Data,9486001:Random,[])
}
END_SDK
Add(Hub,12836985,91,126)
{
OutCount=3
link(onEvent1,3301899:doWork3,[(123,132)])
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,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(Thread,3646847,161,105)
{
Delay=20
FastStop=0
link(onExec,3210884:doWork2,[])
}
Add(Edit,12435698,291,228)
{
Left=475
Top=5
Width=90
Text="Поиск"
DataType=2
link(onEnter,7878121:onEvent1,[(340,241)(340,27)])
}
END_SDK
Add(MST_Virtual,15555683,777,658)
{
MSTControl="MTStrTbl"
Point(doInitPage)
Point(doSetVirtIdx)
link(onChangeVirtIdx,4071568:doEvent1,[])
link(VirtualData,8915826:GetData,[])
}
Add(MathParse,4883725,455,686)
{
MathStr="(%2 - sign(%1) * 3) * ((%2 - sign(%1) * 3) >= 0)"
ResultType=0
link(onResult,5531226:doCompare,[])
link(X2,9756559:Var1,[(468,677)(552,677)(552,726)])
}
Add(If_else,5531226,504,686)
{
Type=1
link(onTrue,14213054:doWork2,[])
link(Op2,4383086:Count,[(517,446)(524,446)])
}
Add(EventFromData,8915826,777,567)
{
link(onEvent,10994896:doValue,[])
}
Add(For,8901862,889,665)
{
link(onEvent,7765738:doOperation,[])
link(End,7882432:Var3,[(902,656)(881,656)(881,719)])
}
Add(Hub,4071568,826,658)
{
link(onEvent1,1592271:doClear,[(872,664)(872,587)])
link(onEvent2,8901862:doFor,[])
}
Add(Math,7765738,945,665)
{
ResultType=0
link(onResult,4383086:doGetString,[(991,671)(991,734)(501,734)(501,433)])
link(Op1,9756559:Var3,[(951,656)(937,656)(937,726)])
}
Add(Hub,9222564,399,420)
{
OutCount=3
link(onEvent1,4383086:doText,[])
link(onEvent2,1551736:doData,[(479,433)(479,475)])
link(onEvent3,15504297:doEvent2,[(424,440)(424,342)])
}
Add(MTStrTbl,7148080,875,133)
{
Top=30
Width=615
Height=481
Align=5
Name="MTStrTbl"
Columns=#4:1=50|5:2=500|4:3=59|
VirtualTab=0
Point(onMouseWheel)
Point(PerPage)
Point(onResize)
Point(onMouseDown)
Point(doStyle)
link(onMouseWheel,171554:doWork2,[])
link(onResize,15504297:doEvent1,[(921,174)(921,223)(844,223)(844,335)])
}
Add(MT_MultiMem,10994896,826,567)
{
Count=3
link(onData,1592271:doRead,[])
}
Add(PointXY,16351534,896,245)
{
link(X,7148080:CountCol,[])
link(Y,7148080:PerPage,[])
}
Add(Str_Enum,625405,924,406)
{
From=0
link(onEnum,7441290:doWrite,[])
}
Add(MatrixRW,7441290,973,399)
{
Point(doClear)
link(Matrix,6724999:Var3,[(979,362)])
link(X,625405:NumSubStr,[(993,390)(965,390)(965,446)(930,446)])
link(Y,8901862:Position,[(1000,390)(1014,390)(1014,705)(895,705)])
}
Add(ScrollBar,16623256,588,462)
{
Left=615
Top=30
Width=20
Height=481
Align=3
Kind=1
Point(doMax)
Point(doPage)
link(onPosition,14213054:doWork1,[(627,468)])
}
Add(DoData,1551736,532,469)
{
link(onEventData,16623256:doMax,[])
link(Data,4383086:EndIdx,[])
}
Add(HubEx,14213054,623,686)
{
link(onEvent,1693440:doEvent1,[])
}
Add(Hub,15504297,854,329)
{
InCount=2
link(onEvent1,327698:doSize,[(872,335)(872,307)])
link(onEvent2,171554:doWork3,[(970,342)])
}
Add(HubEx,171554,966,161)
{
link(onEvent,8308093:In,[])
}
Add(GetDataEx,9756559,777,721)
{
link(Data,15555683:CurVirtIdx,[])
}
Add(LineBreak,3144940,406,686)
{
link(Out,4883725:doCalc,[])
Primary=[8308093,574,-525]
}
Add(GetDataEx,6724999,896,357)
{
link(Data,327698:Matrix,[])
}
Add(ChangeMon,13251618,707,658)
{
link(onData,15555683:doInitPage,[(760,664)(760,692)])
link(Data,7882432:Var1,[(713,649)(643,649)(643,719)])
}
Add(Hub,16430040,273,413)
{
link(onEvent1,11085202:doWork1,[])
}
Add(GetDataEx,7882432,791,714)
{
link(Data,15555683:PerPage,[])
}
Add(Hub,1693440,651,686)
{
link(onEvent1,13251618:doData,[(676,692)(676,664)])
link(onEvent2,15555683:doSetVirtIdx,[])
}

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

0
Ответов: 687
Рейтинг: 142
#53: 2020-11-30 23:14:02 ЛС | профиль | цитата
nesco,

Подготовка к сборке проекта...
Генерация кода целевого языка
Компоновка проекта...
Command line: dcc32.exe "C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\Project7.dpr" "-Uc:\Users\asdf\ownCloud\My HiAsm\." -Q
Borland Delphi Version 12.0 Copyright (c) 1983,98 Inprise Corporation

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(47) Hint: Variable 'defPerPage' is declared but never used in 'THIMST_Virtual.InitPage'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(102) Error: Declaration expected but end of file found

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(15) Hint: Private symbol 'InitPage' declared but never used

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(18) Error: Unsatisfied forward or external declaration: 'THIMST_Virtual._OnLVData'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(30) Error: Unsatisfied forward or external declaration: 'THIMST_Virtual._work_doNextPage'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(31) Error: Unsatisfied forward or external declaration: 'THIMST_Virtual._work_doPrevPage'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(32) Error: Unsatisfied forward or external declaration: 'THIMST_Virtual._work_doSetPage'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(33) Error: Unsatisfied forward or external declaration: 'THIMST_Virtual._work_doResetPage'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(34) Error: Unsatisfied forward or external declaration: 'THIMST_Virtual._work_doInitPage'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(35) Error: Unsatisfied forward or external declaration: 'THIMST_Virtual._work_doSetVirtIdx'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(36) Error: Unsatisfied forward or external declaration: 'THIMST_Virtual._var_CurPage'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(37) Error: Unsatisfied forward or external declaration: 'THIMST_Virtual._var_PerPage'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMST_Virtual.pas(38) Error: Unsatisfied forward or external declaration: 'THIMST_Virtual._var_CurVirtIdx'

C:\Users\asdf\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMainForm_5492FC0.pas(12) Fatal: Could not compile used unit 'hiMST_Virtual.pas'
Сборка завершена.

карма: 15

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#54: 2020-11-30 23:32:20 ЛС | профиль | цитата
Молодец. Я же вложил только часть, которую надо заменить, а не весь код. Вот тебе весь код


unit hiMST_Virtual;

interface

uses Windows, Kol, Share, Debug, hiMTStrTbl;

type
THIMST_Virtual = class(TDebug)
private
FMSTControl: IMSTControl;
DefPage: integer;
Page: integer;
FVirtIdx: integer;
oldPerPage: integer;
procedure InitPage;
procedure SetPage(Value: integer);
procedure SetMSTControl(Value: IMSTControl);
procedure _OnLVData(Sender: PControl; Idx, SubItem: Integer; var Txt: String; var ImgIdx: Integer;
var State: DWORD; var Store: Boolean);
public

_prop_SubItemName: byte;
_data_VirtIdx,
_data_Page,
_data_VirtualData: THI_Event;
_event_onChangeVirtIdx: THI_Event;

property _prop_MSTControl: IMSTControl read FMSTControl write SetMSTControl;
property _prop_DefaultPage: integer read DefPage write SetPage;
procedure _work_doNextPage(var _Data: TData; Index: word);
procedure _work_doPrevPage(var _Data: TData; Index: word);
procedure _work_doSetPage(var _Data: TData; Index: word);
procedure _work_doResetPage(var _Data: TData; Index: word);
procedure _work_doInitPage(var _Data: TData; Index: word);
procedure _work_doSetVirtIdx(var _Data: TData; Index: word);
procedure _var_CurPage(var _Data: TData; Index: word);
procedure _var_PerPage(var _Data: TData; Index: word);
procedure _var_CurVirtIdx(var _Data: TData; Index: word);
end;

implementation

procedure THIMST_Virtual.InitPage;
var
i, j: integer;
sControl: PControl;
ColCount: integer;
begin
if not Assigned(FMSTControl) then exit;
sControl := FMSTControl.ctrlpoint;
sControl.BeginUpdate;
ColCount := FMSTControl.clistcount;
if (sControl.Count <> 0) and (FMSTControl.clistcount <> 0) then
begin
if sControl.LVPerPage > oldPerPage then
begin
for i := 0 to sControl.LVPerPage - oldPerPage - 1 do
sControl.LVItemAdd('');
end
else if sControl.LVPerPage < oldPerPage then
begin
for i := sControl.LVPerPage to oldPerPage - 1 do
sControl.LVDelete(i);
end;
for i := 0 to sControl.LVPerPage - 1 do
begin
sControl.LVItemImageIndex[i]:= I_SKIP;
for j := 0 to ColCount - 1 do
sControl.LVItems[i, j] := '';
end;
oldPerPage := sControl.LVPerPage;
end;
sControl.EndUpDate;
_hi_onEvent(_event_onChangeVirtIdx, FVirtIdx);
end;

procedure THIMST_Virtual.SetPage;
begin
DefPage := Value;
Page := Value;
end;

procedure THIMST_Virtual.SetMSTControl;
var
sControl: PControl;
l: TListViewOptions;
i: integer;
begin
if Value = nil then exit;
FMSTControl := Value;
sControl := Value.ctrlpoint;
l := sControl.LVOptions;
if (lvoOwnerData in l) then
begin
sControl.OnLVData := _OnLVData;
for i := 0 to sControl.LVPerPage - 1 do
sControl.LVItemAdd('');
end;
FVirtIdx := Page * sControl.LVPerPage;
oldPerPage := sControl.LVPerPage;
end;

procedure THIMST_Virtual._OnLVData;
var
dvirt, didx, dsubitem: TData;
PerPage, VirtIdx, OffsetIdx: integer;
begin
PerPage := Sender.LVPerPage;
Page := FVirtIdx div PerPage;
OffsetIdx := FVirtIdx - Page * PerPage;

VirtIdx := Idx + Page * PerPage + OffsetIdx;
dtInteger(dvirt, VirtIdx);
dtInteger(didx, Idx);
case _prop_SubItemName of
0: dtString(dsubitem, Sender.LVColText[SubItem]);
1: dtInteger(dsubitem, SubItem);
end;
dvirt.ldata := @didx;
didx.ldata := @dsubitem;
_ReadData(dvirt, _data_VirtualData);
case dvirt.data_type of
data_null: exit;
end;
Txt := ReadString(dvirt, null);
case dvirt.data_type of
data_null: exit;
end;
ImgIdx := ReadInteger(dvirt, null);
end;

procedure THIMST_Virtual._work_doNextPage;
var
sControl: PControl;
begin
if not Assigned(FMSTControl) then exit;
sControl := FMSTControl.ctrlpoint;
inc(FVirtIdx, sControl.LVPerPage);
InitPage;
end;

procedure THIMST_Virtual._work_doPrevPage;
var
sControl: PControl;
begin
if not Assigned(FMSTControl) then exit;
sControl := FMSTControl.ctrlpoint;
dec(FVirtIdx, sControl.LVPerPage);
if FVirtIdx < 0 then
FVirtIdx := 0;
InitPage;
end;

procedure THIMST_Virtual._work_doSetPage;
var
sControl: PControl;
begin
if not Assigned(FMSTControl) then exit;
sControl := FMSTControl.ctrlpoint;
Page := ReadInteger(_Data, _data_Page, DefPage);
if Page < 0 then exit;
FVirtIdx := Page * sControl.LVPerPage;
InitPage;
end;

procedure THIMST_Virtual._work_doResetPage;
var
sControl: PControl;
begin
if not Assigned(FMSTControl) then exit;
sControl := FMSTControl.ctrlpoint;
Page := DefPage;
FVirtIdx := Page * sControl.LVPerPage;
InitPage;
end;

procedure THIMST_Virtual._work_doInitPage;
begin
InitPage;
end;

procedure THIMST_Virtual._work_doSetVirtIdx;
var
sControl: PControl;
begin
if not Assigned(FMSTControl) then exit;
sControl := FMSTControl.ctrlpoint;
FVirtIdx := ReadInteger(_Data, _data_VirtIdx);
if FVirtIdx < 0 then FVirtIdx := 0;
_hi_onEvent(_event_onChangeVirtIdx, FVirtIdx);
InvalidateRect(sControl.Handle, nil, false);
end;

procedure THIMST_Virtual._var_CurPage;
begin
dtInteger(_Data, Page);
end;

procedure THIMST_Virtual._var_CurVirtIdx;
begin
dtInteger(_Data, FVirtIdx);
end;

procedure THIMST_Virtual._var_PerPage;
var
sControl: PControl;
begin
if not Assigned(FMSTControl) then exit;
sControl := FMSTControl.ctrlpoint;
dtInteger(_Data, sControl.LVPerPage);
end;

end.
карма: 22

0
Ответов: 687
Рейтинг: 142
#55: 2020-11-30 23:40:14 ЛС | профиль | цитата
nesco писал(а):
Я же вложил только часть, которую надо заменить,
Я это понял и уже сам исправил.
Теперь появились лишние пустые строчки в конце(11 шт.) и когда прокручиваешь, таблица сдвигается вверх. Количество строк сейчас правильное и меняется вместе с изменением размера таблицы.
MST_Virtual.PNG

--- Добавлено в 2020-11-30 23:51:19

А в этой схеме эти исправления не работают.
Add(MainForm,3063237,105,175)
{
Width=651
Height=430
link(onCreate,11085202:doWork1,[])
}
Add(StrList,4383086,364,175)
{
Point(EndIdx)
Point(doGetString)
Point(onGetString)
link(onGetString,3044787:doMT,[(599,188)(599,370)])
}
Add(ChildPanel,11085202,161,189)
{
link(onEvent2,9222564:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,7878121,21,21)
{
EventCount=2
WorkCount=1
VarCount=1
Width=440
Height=270
link(doWork1,12297484:doEvent1,[(46,27)(46,97)])
link(Var1,12435698:Text,[(27,264)(297,264)])
}
Add(Panel,13137533,56,35)
{
Width=635
Height=30
Align=2
}
Add(Button,294400,42,126)
{
Left=15
Top=5
Caption="New"
link(onClick,12836985: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=290
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(onEvent4,14611930:doWork2,[])
}
Add(MultiElement,3210884,217,98)
{
link(onEvent1,2339098:doAdd,[])
link(onEvent2,11063149:doOff,[(284,111)(284,62)])
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,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,1516465:Var3,[(167,40)(146,40)(146,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)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,90280:onEvent1,[(508,104)(508,34)])
link(Str1,15286128:Position,[(475,89)(461,89)(461,138)(55,138)])
link(Str3,1516465:Var2,[(489,82)(349,82)(349,124)(111,124)])
}
Add(GetDataEx,1516465,105,84)
{
link(Data,9486001:Random,[])
}
END_SDK
Add(Hub,12836985,91,126)
{
OutCount=3
link(onEvent1,3301899:doWork3,[(123,132)])
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,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(Thread,3646847,161,105)
{
Delay=20
FastStop=0
link(onExec,3210884:doWork2,[])
}
Add(Edit,12435698,291,228)
{
Left=475
Top=5
Width=90
Text="Поиск"
ClearAfterEnter=1
link(onChange,7878121:onEvent1,[(340,234)(340,27)])
}
END_SDK
Add(MST_Virtual,15555683,497,462)
{
MSTControl="MTStrTbl"
Point(doSetVirtIdx)
Point(doInitPage)
link(onChangeVirtIdx,4071568:doEvent1,[])
link(VirtualData,8855208:GetData,[])
}
Add(MathParse,4883725,329,490)
{
MathStr="(%2 - sign(%1) * 3) * ((%2 - sign(%1) * 3) >= 0)"
ResultType=0
link(onResult,5531226:doCompare,[])
link(X2,15555683:CurVirtIdx,[(342,481)(419,481)(419,516)(503,516)])
}
Add(If_else,5531226,378,490)
{
Type=1
link(onTrue,14213054:doWork2,[])
link(Op2,4383086:EndIdx,[])
}
Add(For,8901862,637,518)
{
InData=0
link(onEvent,4383086:doGetString,[(840,524)(840,230)(354,230)(354,209)])
link(End,7765738:Result,[])
}
Add(Hub,4071568,595,462)
{
OutCount=4
link(onEvent1,282946:doClear,[(620,468)(620,300)])
link(onEvent2,7765738:doOperation,[])
link(onEvent3,8901862:doFor,[(627,482)(627,524)])
}
Add(Math,7765738,644,469)
{
ResultType=0
link(Op2,15555683:PerPage,[(657,453)(587,453)(587,516)(517,516)])
}
Add(Hub,9222564,231,196)
{
OutCount=3
link(onEvent1,4383086:doText,[])
link(onEvent2,1551736:doData,[(277,209)(277,258)])
link(onEvent3,15555683:doResetPage,[(256,216)(256,307)(424,307)(424,489)])
}
Add(MTStrTbl,7148080,259,462)
{
Top=30
Width=615
Height=361
Align=5
Name="MTStrTbl"
Columns=#4:1=50|5:2=500|4:3=59|
VirtualTab=0
Point(onMouseWheel)
Point(PerPage)
Point(onResize)
link(onMouseWheel,4883725:doCalc,[])
}
Add(ScrollBar,16623256,336,245)
{
Left=615
Top=30
Width=20
Height=361
Align=3
Kind=1
Point(doMax)
Point(doPage)
link(onPosition,14213054:doWork1,[(459,251)])
}
Add(DoData,1551736,287,252)
{
link(onEventData,16623256:doMax,[])
link(Data,4383086:Count,[(293,236)(377,236)])
}
Add(HubEx,14213054,455,490)
{
link(onEvent,15555683:doSetVirtIdx,[])
}
Add(MT_String,3044787,637,357)
{
link(onResult,9566642:doAdd,[])
}
Add(EventFromData,8855208,497,336)
{
link(onEvent,11057823:doSeparateMT,[])
}
Add(MT_MultiData,11057823,546,336)
{
Count=3
link(onData2,9566642:doRead,[])
link(onData3,8474984:doRead,[(592,356)(592,398)])
}
Add(MT_Array,11072840,777,336)
{
}
Add(ArrayRW,8474984,777,392)
{
link(onRead,8855208:doData,[(816,398)(816,433)(487,433)(487,342)])
link(Array,11072840:Array,[])
}
Add(Hub,2250609,735,343)
{
link(onEvent1,11072840:doClear,[])
link(onEvent2,11072840:doLoad,[(760,356)(760,342)])
}
Add(MT_MTArray,282946,686,294)
{
}
Add(MT_MTArrayRW,9566642,686,343)
{
link(onRead,2250609:doEvent1,[])
link(Array,282946:Array,[])
}


Редактировалось 5 раз(а), последний 2020-12-01 00:05:19
карма: 15

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#56: 2020-12-01 00:37:01 ЛС | профиль | цитата
Gunta писал(а):
Теперь появились лишние пустые строчки в конце(11 шт.) и когда прокручиваешь, таблица сдвигается вверх.

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

--- Добавлено в 2020-12-01 01:33:38

Таак. Кажется, я победил это безобразие. Вот, замени начальную часть кода

unit hiMST_Virtual;

interface

uses Windows, Kol, Share, Debug, hiMTStrTbl;

type
THIMST_Virtual = class(TDebug)
private
FMSTControl: IMSTControl;
DefPage: integer;
Page: integer;
FVirtIdx: integer;
procedure InitPage;
procedure SetPage(Value: integer);
procedure SetMSTControl(Value: IMSTControl);
procedure _OnLVData(Sender: PControl; Idx, SubItem: Integer; var Txt: String; var ImgIdx: Integer;
var State: DWORD; var Store: Boolean);
public

_prop_SubItemName: byte;
_data_VirtIdx,
_data_Page,
_data_VirtualData: THI_Event;
_event_onChangeVirtIdx: THI_Event;

property _prop_MSTControl: IMSTControl read FMSTControl write SetMSTControl;
property _prop_DefaultPage: integer read DefPage write SetPage;
procedure _work_doNextPage(var _Data: TData; Index: word);
procedure _work_doPrevPage(var _Data: TData; Index: word);
procedure _work_doSetPage(var _Data: TData; Index: word);
procedure _work_doResetPage(var _Data: TData; Index: word);
procedure _work_doInitPage(var _Data: TData; Index: word);
procedure _work_doSetVirtIdx(var _Data: TData; Index: word);
procedure _var_CurPage(var _Data: TData; Index: word);
procedure _var_PerPage(var _Data: TData; Index: word);
procedure _var_CurVirtIdx(var _Data: TData; Index: word);
end;

implementation

procedure THIMST_Virtual.InitPage;
var
i: integer;
sControl: PControl;
begin
if not Assigned(FMSTControl) then exit;
sControl := FMSTControl.ctrlpoint;
sControl.BeginUpdate;
if (sControl.Count <> 0) then
for i := sControl.Count - 1 downto 0 do sControl.LVDelete(i);
for i := 0 to sControl.LVPerPage - 1 do sControl.LVItemAdd('');
sControl.EndUpDate;
_hi_onEvent(_event_onChangeVirtIdx, FVirtIdx);
end;

procedure THIMST_Virtual.SetPage;
begin
DefPage := Value;
Page := Value;
end;

procedure THIMST_Virtual.SetMSTControl;
var
sControl: PControl;
l: TListViewOptions;
i: integer;
begin
if Value = nil then exit;
FMSTControl := Value;
sControl := Value.ctrlpoint;
l := sControl.LVOptions;
if (lvoOwnerData in l) then
begin
sControl.OnLVData := _OnLVData;
for i := 0 to sControl.LVPerPage - 1 do
sControl.LVItemAdd('');
end;
FVirtIdx := Page * sControl.LVPerPage;
end;

и вот твоя схема

Схема

Add(MainForm,3063237,280,147)
{
Width=651
Height=430
link(onCreate,11085202:doWork1,[])
}
Add(StrList,4383086,539,147)
{
Point(EndIdx)
Point(doGetString)
Point(onGetString)
link(onGetString,3044787:doMT,[(879,160)(879,342)])
}
Add(ChildPanel,11085202,357,161)
{
link(onEvent2,9222564:doEvent1,[])
}
BEGIN_SDK
Add(EditMulti,7878121,21,21)
{
EventCount=2
WorkCount=1
VarCount=1
Width=440
Height=270
link(doWork1,12297484:doEvent1,[(46,27)(46,97)])
link(Var1,12435698:Text,[(27,264)(297,264)])
}
Add(Panel,13137533,56,35)
{
Width=635
Height=30
Align=2
}
Add(Button,294400,42,126)
{
Left=15
Top=5
Caption="New"
link(onClick,12836985: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=290
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(onEvent4,14611930:doWork2,[])
}
Add(MultiElement,3210884,217,98)
{
link(onEvent1,2339098:doAdd,[])
link(onEvent2,11063149:doOff,[(284,111)(284,62)])
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,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,1516465:Var3,[(167,40)(146,40)(146,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)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,90280:onEvent1,[(508,104)(508,34)])
link(Str1,15286128:Position,[(475,89)(461,89)(461,138)(55,138)])
link(Str3,1516465:Var2,[(489,82)(349,82)(349,124)(111,124)])
}
Add(GetDataEx,1516465,105,84)
{
link(Data,9486001:Random,[])
}
END_SDK
Add(Hub,12836985,91,126)
{
OutCount=3
link(onEvent1,3301899:doWork3,[(123,132)])
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,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(Thread,3646847,161,105)
{
Delay=20
FastStop=0
link(onExec,3210884:doWork2,[])
}
Add(Edit,12435698,291,228)
{
Left=475
Top=5
Width=90
Text="Поиск"
ClearAfterEnter=1
link(onChange,7878121:onEvent1,[(340,234)(340,27)])
}
END_SDK
Add(MST_Virtual,15555683,749,434)
{
MSTControl="MTStrTbl"
Point(doInitPage)
Point(doSetVirtIdx)
link(onChangeVirtIdx,4071568:doEvent1,[])
link(VirtualData,8855208:GetData,[])
}
Add(MathParse,4883725,504,469)
{
MathStr="(%2 - sign(%1) * 3) * ((%2 - sign(%1) * 3) >= 0)"
ResultType=0
link(onResult,5531226:doCompare,[])
link(X2,15555683:CurVirtIdx,[(517,453)(671,453)(671,488)(755,488)])
}
Add(If_else,5531226,553,469)
{
Type=1
link(onTrue,14213054:doWork2,[])
link(Op2,4383086:EndIdx,[])
}
Add(For,8901862,889,490)
{
InData=0
link(onEvent,4383086:doGetString,[(1047,496)(1047,139)(508,139)(508,181)])
link(End,7765738:Result,[])
}
Add(Hub,4071568,847,434)
{
OutCount=3
link(onEvent1,282946:doClear,[(872,440)(872,272)])
link(onEvent2,7765738:doOperation,[])
link(onEvent3,8901862:doFor,[(879,454)(879,496)])
}
Add(Math,7765738,896,441)
{
ResultType=0
link(Op2,12847194:Var3,[(909,425)(839,425)(839,488)])
}
Add(Hub,9222564,406,168)
{
OutCount=3
link(onEvent1,4383086:doText,[])
link(onEvent2,1551736:doData,[(452,181)(452,230)])
link(onEvent3,16088402:doWork1,[(445,188)])
}
Add(MTStrTbl,7148080,329,441)
{
Top=30
Width=615
Height=361
Align=5
Name="MTStrTbl"
Columns=#4:1=50|5:2=500|4:3=59|
VirtualTab=0
Point(onMouseWheel)
Point(PerPage)
Point(onResize)
link(onMouseWheel,16088402:doWork2,[])
link(onResize,10059158:doData,[(364,482)(364,524)])
}
Add(ScrollBar,16623256,511,217)
{
Left=615
Top=30
Width=20
Height=361
Align=3
Kind=1
Point(doMax)
Point(doPage)
link(onPosition,14213054:doWork1,[(606,223)])
}
Add(DoData,1551736,462,224)
{
link(onEventData,16623256:doMax,[])
link(Data,4383086:Count,[(468,208)(552,208)])
}
Add(HubEx,14213054,602,469)
{
link(onEvent,9940220:doData,[])
}
Add(MT_String,3044787,889,329)
{
link(onResult,9566642:doAdd,[])
}
Add(EventFromData,8855208,749,308)
{
link(onEvent,11057823:doSeparateMT,[])
}
Add(MT_MultiData,11057823,798,308)
{
Count=3
link(onData2,9566642:doRead,[])
link(onData3,8474984:doRead,[(844,328)(844,370)])
}
Add(MT_Array,11072840,1029,308)
{
}
Add(ArrayRW,8474984,1029,364)
{
link(onRead,8855208:doData,[(1068,370)(1068,405)(739,405)(739,314)])
link(Array,11072840:Array,[])
}
Add(Hub,2250609,987,315)
{
link(onEvent1,11072840:doClear,[])
link(onEvent2,11072840:doLoad,[(1012,328)(1012,314)])
}
Add(MT_MTArray,282946,938,266)
{
}
Add(MT_MTArrayRW,9566642,938,315)
{
link(onRead,2250609:doEvent1,[])
link(Array,282946:Array,[])
}
Add(ChangeMon,10059158,630,518)
{
link(onData,15555683:doInitPage,[(718,524)(718,468)])
link(Data,12847194:Var2,[(636,509)(769,509)])
}
Add(GetDataEx,12847194,763,483)
{
link(Data,15555683:PerPage,[])
}
Add(HubEx,16088402,441,469)
{
link(onEvent,4883725:doCalc,[])
}
Add(ChangeMon,9940220,630,469)
{
link(onData,15555683:doSetVirtIdx,[])
}

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

0
Ответов: 687
Рейтинг: 142
#57: 2020-12-01 06:47:41 ЛС | профиль | цитата
nesco, работает. Вроде, без всяких артефактов. Проверил и на других схемах, что наклепал за вчера, работают без замечаний. Спасибо.
Компонент интересный, особенно при работе с базами данных и таких таблиц как у Joiner(50000 строк), но для новичков - тёмный лес.

Редактировалось 2 раз(а), последний 2020-12-01 10:01:16
карма: 15

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#58: 2020-12-01 11:31:55 ЛС | профиль | цитата
Gunta писал(а):
но для новичков - тёмный лес

Да вся таблица MTStrTbl для новичков темный лес.
карма: 22

0
Ответов: 207
Рейтинг: 14
#59: 2020-12-01 14:40:42 ЛС | профиль | цитата
nesco писал(а):
Самый луший вариант был бы отключить скролл, но тогда косячит отображение таблицы в заголовке.

Да, если б этот баг удалось исправить, тогда вообще не отличить от обычной таблицы. Сейчас скролл все же проскакивает иногда (на мгновение).
Gunta писал(а):
Компонент интересный, особенно при работе с базами данных и таких таблиц как у Joiner

Да, под большие таблицы у этого компонента явное преимущество в скорости.
карма: 2

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#60: 2020-12-01 15:49:59 ЛС | профиль | цитата
Joiner писал(а):
Сейчас скролл все же проскакивает иногда (на мгновение)

Да, бывает, но он не фиксируется из-за внутренней переинициализации методом doInitPage. Этот метод надо применять всегда, если необходимо менять размер таблицы по высоте.
Joiner писал(а):
Да, под большие таблицы у этого компонента явное преимущество в скорости.

Одно дело грузить максимум 100 строк, другое дело -- 100000 строк

Редактировалось 3 раз(а), последний 2020-12-01 15:54:27
карма: 22

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