1

我有一个显示在我的应用程序顶部的 winform。我想要的是如果表单在一段时间内处于非活动状态,则将其设置为 20% 的不透明度。现在,当我单击按钮时,我运行了一个类似的事件,表单的大小发生了变化。我在执行转换时使用计时器来设置表单不透明度。如果表单上有不活动,我现在可以使用类似的代码来设置不透明度,我只是不知道如何检测不活动。

这就是我所拥有的。

    Private Sub btnShowForm_Click(sender As Object, e As EventArgs) Handles btnShowForm.Click

    'This procedure runs when the btnShowForm
    'button is clicked. The procedure maximizes the size
    'of the form, hides the left right button and displays the button
    'to expand the form. It also moves the combobox down. 
    'It calls the viewButtons function to hide and
    'display the right buttons.     
    'The procedure also uses a timer to set the fade in and out the
    'form when is min or max

    Me.Height = 126

    Me.Opacity = 0.2                   'About 20%
    timNavigationPage.Interval = 100   'about one-tenth of a second
    timNavigationPage.Start()          'Start the timer


    cmbViewDataSheets.Location = New Point(741, 89)


    viewButtons(False, True)

End Sub

Private Sub timNavigationPage_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timNavigationPage.Tick

    'Initialize the timer to fade form.

    Dim x As Double = 0.075

    If Me.Opacity <= 1 Then
        Me.Opacity += x     'increment opacity with 7.5%

    ElseIf Me.Opacity + x > 1 Then
        timNavigationPage.Stop()       'Stop the timer then the opacity has reached a 100%

    End If

End Sub
4

2 回答 2

2

这是一个很好的例子,使用GetLastInputInfofromuser32.dll

于 2013-07-20T04:19:49.400 回答
1

IMessageFilter 接口对此很有用,它可以让您查看所有鼠标和键盘消息。看到计时器时启用计时器。勾选时更改 Opacity 属性。像这样:

Public Class Form1
    Implements IMessageFilter

    Public Sub New()
        InitializeComponent()
        Application.AddMessageFilter(Me)
        Me.Opacity = 0.99
        Timer1.Start()
    End Sub

    Protected Overrides Sub OnFormClosed(e As FormClosedEventArgs)
        Application.RemoveMessageFilter(Me)
        MyBase.OnFormClosed(e)
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Timer1.Enabled = False
        Me.Opacity = 0.3
    End Sub

    Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
        '' Bump timer on mouse or keyboard messages
        If (m.Msg >= &H200 And m.Msg <= &H20E) Or (m.Msg >= &H100 And m.Msg <= &H109) Then
            Timer1.Stop()
            Timer1.Start()
            Me.Opacity = 0.99
        End If
        Return False
    End Function
End Class
于 2013-07-20T10:30:11.310 回答