Add(MainForm,2953706,56,182)
{
Width=436
Height=395
Position=1
link(onCreate,1793119:doEvent1,[])
}
Add(ListBox,6199211,385,126)
{
Left=10
Top=10
Width=375
Height=310
Name="lbx"
Point(PHandle)
Point(onKeyUp)
Point(onKeyDown)
}
Add(InlineCode,8771271,406,203)
{
WorkPoints=#8:sDisable|11:sScrollInfo|5:UPSCR|7:DOWNSCR|11:POSITIONSCR|
EventPoints=#10:onPosition|12:onScrollInfo|
DataPoints=#7:PHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|40:uses kol,Share,Debug, Windows, Messages;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|24: sControl: PControl;|21: si: TScrollInfo;|9: public|14: onPosition,|19: onScrollInfo,|25: PHandle: THI_Event;|54: procedure sDisable(var _Data:TData; Index:word);|63: procedure sScrollInfo(var _Data:TData; Index:word); |51: procedure UPSCR(var _Data:TData; Index:word);|53: procedure DOWNSCR(var _Data:TData; Index:word);|67: procedure POSITIONSCR(var _Data:TData; Index:word); |5: end;|0:|14:implementation|0:|81:function WndProcSCR(Sender: PControl; var Msg: TMsg; var Rslt: Integer): Boolean;|3:var|22: fClass: THiAsmClass;|5:begin|18: Result := false;|36: fClass := THiAsmClass(Sender.Tag);|16: with fClass do|9: begin |23: case Msg.message of|20: WM_NCCALCSIZE:|53: ShowScrollBar(Sender.Handle, SB_VERT, false);|39: WM_KEYUP, WM_KEYDOWN, WM_MOUSEWHEEL:|89: _hi_onEvent(fClass.onPosition, SendMessage(Sender.Handle, LB_GETTOPINDEX, 0, 0));|8: end;|8: end; |4:end;|0:|30:procedure THiAsmUnit.sDisable;|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|40: if not Assigned(sControl) then exit; |33: sControl.Tag := Cardinal(Self);|34: sControl.AttachProc(WndProcSCR);|49: ShowScrollBar(sControl.Handle, SB_VERT, false);|4:end;|0:|33:procedure THiAsmUnit.sScrollInfo;|3:var|12: dt: TData;|11: mt:PMT; |5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|40: if not Assigned(sControl) then exit; |22: si.fMask := SIF_ALL;|46: GetScrollInfo(sControl.Handle, SB_VERT, si);|25: dtInteger(dt, si.nMin);|20: mt := mt_make(dt);|22: mt_int(mt, si.nMax);|23: mt_int(mt, si.nPage);|22: mt_int(mt, si.nPos);|33: _hi_OnEvent_(onScrollInfo, dt);|14: mt_free(mt);|4:end;|0:|27:procedure THiAsmUnit.UPSCR;|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|38: if not Assigned(sControl) then exit;|57: SendMessage(sControl.Handle, WM_VSCROLL, SB_LINEUP, 0);|22: sControl.Invalidate;|4:end;|0:|29:procedure THiAsmUnit.DOWNSCR;|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|38: if not Assigned(sControl) then exit;|59: SendMessage(sControl.Handle, WM_VSCROLL, SB_LINEDOWN, 0);|22: sControl.Invalidate;|4:end;|0:|33:procedure THiAsmUnit.POSITIONSCR;|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|38: if not Assigned(sControl) then exit;|23: sControl.BeginUpdate;|22: si.fMask := SIF_ALL;|46: GetScrollInfo(sControl.Handle, SB_VERT, si);|30: si.nPos := ToInteger(_Data);|54: SetScrollInfo(sControl.Handle, SB_VERT, si, true); |85: SendMessage(sControl.Handle, WM_VSCROLL, MAKEWPARAM(SB_THUMBPOSITION, si.nPos), 0);|61:// SendMessage(sControl.Handle, LB_SETTOPINDEX, si.nPos, 0);|21: sControl.EndUpdate;|5:end; |17: |4:end.|
link(onPosition,14433224:doWork2,[(445,209)(445,202)])
link(onScrollInfo,3914989:doEvent1,[])
link(PHandle,6199211:PHandle,[])
}
Add(Hub,1793119,105,196)
{
OutCount=4
link(onEvent1,3849521:doWork2,[])
link(onEvent2,8771271:sDisable,[])
link(onEvent3,3525883:doData,[(151,216)(151,286)])
link(onEvent4,12655402:doData,[(144,223)(144,328)])
}
Add(ButtonRush,9753586,280,280)
{
Left=390
Top=10
Width=20
Height=20
Font=[Wingdings 3,8,0,0,2]
Caption=""
Glyphs=[]
Point(doCaption)
Point(doVisible)
link(onClick,14801093:doEvent1,[])
}
Add(TrackBarRush,268062,805,196)
{
Left=380
Top=30
Width=40
Height=269
TickColor=-16777201
Kind=1
DotsCount=3
Point(doMin)
Point(doMax)
Point(onMouseDown)
Point(doThumbWidth)
Point(Height)
Point(Width)
Point(doVisible)
link(onPosition,11162797:doWork1,[(860,202)])
link(onMouseDown,4556913:doData,[(846,209)(846,267)(795,267)(795,286)])
}
Add(DoData,3525883,161,280)
{
Data=Integer(129)
link(onEventData,8290152:doConvert,[])
}
Add(Convertor,8290152,210,280)
{
Mode=4
link(onResult,9753586:doCaption,[])
}
Add(ButtonRush,21397,280,322)
{
Left=390
Top=299
Width=20
Height=20
Font=[Wingdings 3,8,0,0,2]
Caption=""
Glyphs=[]
Point(doCaption)
Point(doVisible)
link(onClick,10520044:doEvent1,[])
}
Add(DoData,12655402,161,322)
{
Data=Integer(130)
link(onEventData,2096792:doConvert,[])
}
Add(Convertor,2096792,210,322)
{
Mode=4
link(onResult,21397:doCaption,[])
}
Add(Hub,16712539,287,154)
{
link(onEvent1,6199211:doLoad,[])
link(onEvent2,3849521:doWork1,[(319,167)])
}
Add(MT_MultiData,5353039,504,210)
{
Count=1
Point(RemaindData)
link(onData1,268062:doMin,[])
}
Add(Hub,14801093,322,280)
{
link(onEvent1,8771271:UPSCR,[(366,286)(366,223)])
link(onEvent2,12070386:doWork2,[])
}
Add(HubEx,1141368,350,210)
{
link(onEvent,8771271:sScrollInfo,[])
}
Add(Hub,10520044,322,322)
{
link(onEvent1,8771271:DOWNSCR,[(375,328)(375,230)])
link(onEvent2,12070386:doWork3,[(354,335)])
}
Add(HubEx,12070386,350,287)
{
Angle=3
link(onEvent,1141368:doWork3,[])
}
Add(MathParse,5460482,504,315)
{
MathStr="%1 - %2 + 1"
link(onResult,268062:doMax,[(543,321)(543,223)])
link(X1,6294834:Var2,[])
link(X2,7522774:Var2,[])
}
Add(Hub,3914989,455,210)
{
OutCount=4
link(onEvent1,5353039:doSeparateMT,[])
link(onEvent2,4585351:doValue,[(494,223)(494,265)])
link(onEvent3,5460482:doCalc,[(487,230)(487,321)])
link(onEvent4,1201366:doCompare,[(480,237)(480,356)])
}
Add(MT_MultiMem,4585351,504,259)
{
Point(Data)
link(onData,3179209:doSeparateMT,[])
link(Data,5353039:RemaindData,[])
}
Add(MT_MultiData,3179209,560,259)
{
From=2
Count=1
link(onData1,14433224:doWork3,[(599,265)])
}
Add(HubEx,14433224,595,196)
{
link(onEvent,268062:doPosition,[])
}
Add(DoData,4556913,805,280)
{
link(onEventData,11162797:doWork2,[])
link(Data,268062:Position,[])
}
Add(HubEx,11162797,856,280)
{
Angle=1
link(onEvent,8771271:POSITIONSCR,[(860,429)(396,429)(396,237)])
}
Add(GetDataEx,6294834,504,301)
{
link(Data,4585351:Value1,[])
}
Add(GetDataEx,7522774,511,294)
{
link(Data,4585351:Value2,[])
}
Add(MathParse,4910229,679,350)
{
DataCount=3
MathStr="max(10, (%3 * %2) / %1)"
ResultType=0
link(onResult,268062:doThumbWidth,[(725,356)(725,230)])
link(X1,6294834:Var3,[(685,306)])
link(X2,8306037:Var3,[(692,299)])
link(X3,268062:Height,[(699,257)(818,257)])
}
Add(If_else,1201366,567,350)
{
Type=2
Op2=Integer(0)
link(onTrue,16741202:doEvent1,[])
link(onFalse,2799933:doWork1,[(613,363)(613,398)])
link(Op1,8306037:Var2,[])
}
Add(ChanelToIndex,2799933,679,392)
{
link(onIndex,13304512:doEvent1,[])
}
Add(Hub,16741202,623,350)
{
link(onEvent1,4910229:doCalc,[])
link(onEvent2,2799933:doWork2,[(669,363)(669,405)])
}
Add(Hub,13304512,728,392)
{
OutCount=3
link(onEvent1,268062:doVisible,[(753,398)(753,237)])
link(onEvent2,9753586:doVisible,[(760,405)(760,447)(263,447)(263,293)])
link(onEvent3,21397:doVisible,[(753,412)(753,440)(270,440)(270,335)])
}
Add(GetDataEx,8306037,567,294)
{
Angle=3
link(Data,7522774:Var3,[])
}
Add(Button,7427802,182,154)
{
Left=180
Top=330
TabOrder=-1
Caption="Load"
link(onClick,16465050:doExecute,[])
}
Add(ODialog,16465050,231,154)
{
Filter="*.txt|*.txt"
link(onExecute,16712539:doEvent1,[])
}
Add(HubEx,3849521,315,196)
{
Angle=1
link(onEvent,1141368:doWork2,[(319,216)])
}
Правда нет возможности прощелкивать страницы. Пока не пробовал это реализовать. Может чего еще не учел, сильно не тестировал.