如何在 UI 框架中创建闪烁元素

How to create a blinking element in a UI frame

我有一个很好的 UI 框架对话框,我想要一个按钮,当按下该按钮时会导致 UI 中的一个元素(即小图像)闪烁。按第二个按钮应该停止元素闪烁。有可用的示例代码吗?

感谢您的帮助。

DM 脚本中没有可用的特定动画 UI 元素。但是,我通过使用周期性主线程定期交替位图元素成功地创建了 'blinking' 元素。 这是示例代码:

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()

请注意,即使对话框 window 关闭,已注册的周期性任务也会将 UI 框架对象保留在范围内。 但是,当对话框 window 不再存在时,LookupElement() 命令将不会 return 一个有效的 TagGroup,所以我用它来检查这种情况并自动注销任务,如果它仍然存在是 运行.

我的示例代码没有 start/stop 闪烁按钮,但可以直接添加。只需调用相应的操作方法 StartBlinkStopBlink