我有一个很好的UIframe对话框,并希望有一个按钮,按下时会导致UI中的元素(即小图像)闪烁。按第二个按钮应该可以阻止元素闪烁。有没有可用的示例代码?
感谢您的帮助。
答案 0 :(得分:1)
DM脚本中没有可用的特定动画UI元素。但是,我成功地制造了一个闪烁的'元素通过使用周期性主线程来定期交替位图元素。 以下是示例代码:
Class myBlinkDotDLG : UIframe
{
number onBlink
number periodicTaskID
image GetDotImage( object self, number highlight )
{
image dot := realimage( "Dot", 4,40,40)
dot = iradius < 20 ? (20-iradius) : 0
dot /= max(dot)
RGBImage colDot = highlight ? (RGB(255,180,0)*dot) : (RGB(250,80,0)*dot)
colDot = RGB( Red(colDot)+75,Green(colDot)+76,Blue(colDot)+78)
return ColDot
}
void StartBlink( object self )
{
if ( 0 == periodicTaskID )
periodicTaskID = AddMainThreadPeriodicTask( self,"BlinkToggle", 0.5 )
}
void StopBlink( object self )
{
if ( 0 != periodicTaskID )
RemoveMainThreadTask( periodicTaskID )
periodicTaskID = 0
}
void BlinkToggle( object self )
{
onBlink = !onBlink
Result( "\n Blink:" + onBlink )
taggroup dotTG = self.LookUpElement("Dot")
if ( dotTG.TagGroupisValid())
dotTG.DLGGetElement(0).DLGBitmapData(self.GetDotImage(onBlink))
else
self.StopBlink() // Important! You need to unregister the mainthread task if there is no dialog anymore
}
object CreateAndShowDialog( object self )
{
TagGroup DLG, DLGitems
DLG = DLGCreateDialog( "Test", DLGitems )
DLGitems.DLGAddElement( DLGCreateGraphic(40,40).DLGAddBitmap( self.GetDotImage(1) ).DLGIdentifier("Dot") )
DLGitems.DLGAddElement( DLGCreateLabel( "Blinking\tDot" ))
DLG.DLGTableLayout(2,1,0)
self.Init( DLG ).Display( "Blinky" )
self.StartBlink()
return self
}
}
Alloc( myBlinkDotDLG ).CreateAndShowDialog()
请注意,即使关闭对话框窗口,注册的定期任务也会将UIframe对象保留在范围内。
但是,当对话框窗口不再存在时,LookupElement()
命令将不会返回有效的TagGroup,因此我使用它来检查此情况并自动取消注册任务,如果它仍在运行。
我的示例代码没有启动/停止闪烁的按钮,但这可以直接添加。只需按照相应的操作方法调用StartBlink
和StopBlink