diff options
Diffstat (limited to 'installer/scroll.pas')
-rw-r--r-- | installer/scroll.pas | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/installer/scroll.pas b/installer/scroll.pas index 379bb103b8..803c071d62 100644 --- a/installer/scroll.pas +++ b/installer/scroll.pas @@ -52,6 +52,7 @@ type private DrawLock: Byte; DrawFlag: Boolean; + ScrollFlag : boolean; procedure CheckDraw; procedure UpdateLimits; procedure ShiftViews(DX,DY: sw_integer); @@ -86,6 +87,11 @@ procedure TScrollBox.HandleEvent(var Event: TEvent); begin if (Event.What=evBroadcast) and (Event.Command=cmCursorChanged) then TrackCursor; + If (Event.What = evBroadcast) AND + (Event.Command = cmScrollBarChanged) AND { Scroll bar change } + Not ScrollFlag AND + ((Event.InfoPtr = HScrollBar) OR { Our scrollbar? } + (Event.InfoPtr = VScrollBar)) Then ScrollDraw; { Redraw scroller } inherited HandleEvent(Event); end; @@ -123,7 +129,7 @@ begin if (D.X <> Delta.X) or (D.Y <> Delta.Y) then begin SetCursor(Cursor.X + Delta.X - D.X, Cursor.Y + Delta.Y - D.Y); - Delta := D; + ScrollTo(D.X,D.Y); if DrawLock <> 0 then DrawFlag := True else @@ -134,14 +140,19 @@ end; procedure TScrollBox.ScrollTo(X, Y: Sw_Integer); var DX,DY: sw_integer; + PrevScrollFlag : boolean; begin Inc(DrawLock); DX:=Delta.X-X; DY:=Delta.Y-Y; + PrevScrollFlag:=ScrollFlag; + ScrollFlag:=true; + if HScrollBar <> nil then HScrollBar^.SetValue(X); if VScrollBar <> nil then VScrollBar^.SetValue(Y); + ScrollFlag:=PrevScrollFlag; ShiftViews(DX,DY); Dec(DrawLock); CheckDraw; @@ -154,6 +165,8 @@ procedure TScrollBox.ShiftViews(DX,DY: sw_integer); end; begin ForEach(@DoShift); + Delta.X:=Delta.X-DX; + Delta.Y:=Delta.Y-DY; end; procedure TScrollBox.SetLimit(X, Y: Sw_Integer); @@ -162,9 +175,9 @@ begin Limit.Y := Y; Inc(DrawLock); if HScrollBar <> nil then - HScrollBar^.SetParams(HScrollBar^.Value, 0, X - Size.X, Size.X - 1, HScrollBar^.ArStep); + HScrollBar^.SetParams(HScrollBar^.Value, HScrollBar^.Min, HScrollBar^.Max, HScrollBar^.PgStep, HScrollBar^.ArStep); if VScrollBar <> nil then - VScrollBar^.SetParams(VScrollBar^.Value, 0, Y - Size.Y, Size.Y - 1, VScrollBar^.ArStep); + VScrollBar^.SetParams(VScrollBar^.Value, VScrollBar^.Min, VScrollBar^.Max, VScrollBar^.PgStep, VScrollBar^.ArStep); Dec(DrawLock); CheckDraw; end; |