98 lines
1.7 KiB
Text
98 lines
1.7 KiB
Text
|
' Gambas class file
|
||
|
|
||
|
Static Private All As New CAnimation[]
|
||
|
|
||
|
Property Read Object As Object
|
||
|
|
||
|
Private $hObject As Object
|
||
|
Private $sProperty As String
|
||
|
Private $fTarget As Float
|
||
|
Private $fTime As Float
|
||
|
Private $hTimer As Timer
|
||
|
|
||
|
Static Public Sub Start(hObject As Control, sProperty As String, fTarget As Float, iTime As Integer)
|
||
|
|
||
|
Dim hAnim As CAnimation
|
||
|
Dim aStop As New CAnimation[]
|
||
|
|
||
|
For Each hAnim In All
|
||
|
If hAnim.Object = hObject Then aStop.Add(hAnim)
|
||
|
Next
|
||
|
|
||
|
For Each hAnim In aStop
|
||
|
hAnim.Stop
|
||
|
Next
|
||
|
|
||
|
hAnim = New CAnimation(hObject, sProperty, fTarget, iTime)
|
||
|
All.Add(hAnim)
|
||
|
|
||
|
End
|
||
|
|
||
|
Static Public Sub Exit()
|
||
|
|
||
|
While All.Count
|
||
|
All[0].Stop
|
||
|
Wend
|
||
|
|
||
|
End
|
||
|
|
||
|
|
||
|
|
||
|
Public Sub _new(hObject As Control, sProperty As String, fTarget As Float, iTime As Integer)
|
||
|
|
||
|
'Debug hObject.Tag;; sProperty;; fTarget
|
||
|
|
||
|
$hObject = hObject
|
||
|
$sProperty = sProperty
|
||
|
$fTarget = fTarget
|
||
|
$fTime = Timer + iTime / 1000
|
||
|
|
||
|
$hTimer = New Timer As "Timer"
|
||
|
$hTimer.Delay = 50
|
||
|
$hTimer.Start
|
||
|
|
||
|
End
|
||
|
|
||
|
Public Sub Timer_Timer()
|
||
|
|
||
|
Dim fValue As Float
|
||
|
Dim iSign As Integer
|
||
|
|
||
|
fValue = Object.GetProperty($hObject, $sProperty)
|
||
|
|
||
|
If Abs(fValue - $fTarget) < 1E-6 Then
|
||
|
Object.SetProperty($hObject, $sProperty, $fTarget)
|
||
|
{Stop}
|
||
|
Else
|
||
|
iSign = Sgn($fTarget - fValue)
|
||
|
fValue += ($fTarget - fValue) / (1000 * ($fTime - Timer) / $hTimer.Delay)
|
||
|
If Sgn($fTarget - fValue) <> iSign Then
|
||
|
Object.SetProperty($hObject, $sProperty, $fTarget)
|
||
|
{Stop}
|
||
|
Else
|
||
|
Object.SetProperty($hObject, $sProperty, fValue)
|
||
|
Endif
|
||
|
Endif
|
||
|
|
||
|
Catch
|
||
|
|
||
|
{Stop}
|
||
|
|
||
|
End
|
||
|
|
||
|
Public Sub Stop()
|
||
|
|
||
|
$hTimer.Stop
|
||
|
$hTimer = Null
|
||
|
$hObject = Null
|
||
|
|
||
|
All.Remove(All.Find(Me))
|
||
|
|
||
|
End
|
||
|
|
||
|
Private Function Object_Read() As Object
|
||
|
|
||
|
Return $hObject
|
||
|
|
||
|
End
|