2012-03-14 4 views
0

MACといくつかのjqueryウェブサイトで見られるような "GROWL"のような効果を生み出すために、次のコードを思いつきました。 (このようなものの例はHEREです。私が使用しているコードはうまく動作し、メッセージはうまく表示されますが、問題を解決するために苦労しているのは、現在のメッセージをどのように表示するかですそれぞれ前の画面にメッセージがまだのthatsとポップアップするメッセージごとにタイマーを持つ現在、それは同時に、すべてのメッセージボックスを閉じVB.netアプリケーションのGROWLエフェクト

コードはこれです:。。

Public Class Growl 
Private _notifications As New Dictionary(Of Integer, msgWindow) 
Private _count As Integer = 0 

Public Sub Remove(ByVal Sender As msgWindow, ByVal e As EventArgs) 
    _notifications.Remove(CInt(Val(Sender.Name.Substring(1)))) 
    RefreshPositions() 
End Sub 

Private Sub RefreshPositions() 
    Dim _top As Integer = 5 
    For a As Integer = 0 To _count 
     If _notifications.ContainsKey(a) Then 
      _notifications.Item(a).Top = _top 
      _top += _notifications.Item(a).Height + 5 
     End If 
    Next 
End Sub 

Public Sub ShowMessageBox(ByVal typeOfNotification As String, ByVal msg As String) 
    Dim x As New msgWindow 

    x.Name = "m" & _count 
    AddHandler x.FormClosed, AddressOf Remove 
    _notifications(_count) = x 
    _count += 1 
    x.showMessageBox(typeOfNotification, msg) 
    RefreshPositions() 
End Sub 
End Class 

そして、これがありますメッセージボックスコード自体:

Public Class msgWindow 
Public howLong As Integer 
Public theType As String 
Private loading As Boolean 
Dim intX As Integer = Screen.PrimaryScreen.Bounds.Width 

Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs) 
    Dim pn As New Pen(Color.DarkGreen) 

    If theType = "OK" Then 
     pn.Color = Color.DarkGreen 
    ElseIf theType = "ERR" Then 
     pn.Color = Color.DarkRed 
    Else 
     pn.Color = Color.DarkOrange 
    End If 

    Me.Width = intX 
    Me.Left = 0 
    Me.Top = 0 

    lblSaying.Width = Me.Width 
    pn.Width = 2 
    pe.Graphics.DrawRectangle(pn, 0, 0, Me.Width, Me.Height) 
    pn = Nothing 
End Sub 

Public Sub showMessageBox(ByVal typeOfBox As String, ByVal theMessage As String) 
    Me.Opacity = 0 
    Me.Show() 
    'Me.SetDesktopLocation(My.Computer.Screen.WorkingArea.Width - 300, 15) 

    Me.loading = True 
    theType = typeOfBox 
    lblSaying.Text = theMessage 

    If typeOfBox = "OK" Then 
     Me.BackColor = Color.FromArgb(192, 255, 192) 
    ElseIf typeOfBox = "ERR" Then 
     Me.BackColor = Color.FromArgb(255, 192, 192) 
    Else 
     Me.BackColor = Color.FromArgb(255, 255, 192) 
    End If 

    If Len(theMessage) <= 30 Then 
     howLong = 4000 
    ElseIf Len(theMessage) >= 31 And Len(theMessage) <= 80 Then 
     howLong = 7000 
    ElseIf Len(theMessage) >= 81 And Len(theMessage) <= 100 Then 
     howLong = 12000 
    Else 
     howLong = 17000 
    End If 

    Me.opacityTimer.Start() 
End Sub 

Private Sub opacityTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles opacityTimer.Tick 
    If Me.loading Then 
     Me.Opacity += 0.8 

     If Me.Opacity >= 0.8 Then 
      Me.opacityTimer.Stop() 
      Me.opacityTimer.Dispose() 
      Pause(howLong) 
      Me.loading = False 
      Me.opacityTimer.Start() 
     End If 
    Else 
     Me.Opacity -= 0.08 

     If Me.Opacity <= 0 Then 
      Me.opacityTimer.Stop() 
      Me.Close() 
     End If 
    End If 
End Sub 

Public Sub Pause(ByVal Milliseconds As Integer) 
    Dim dTimer As Date 

    dTimer = Now.AddMilliseconds(Milliseconds) 

    Do While dTimer > Now 
     Application.DoEvents() 
    Loop 
End Sub 

Private Sub lblSaying_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblSaying.Click 
    Me.opacityTimer.Stop() 
    Me.Close() 
End Sub 
End Class 

今は古い投稿の下に最新の投稿が表示されます。最新のトップを表示して、他のメッセージボックスが表示されている間、リストの下で作業を続けるためには、何を変更する必要がありますか?

助けがあれば助かります。

デビッド

答えて

1

アップだけ頭、私は両方のサポートGNTP WindowsとうなりのためのGrowlを信じています。つまり、GNTP VBベースのライブラリを実装するだけで(または既存のものを使用して)、それらのライブラリと対話することができます。 :)

+0

http://www.growlforwindows.com/gfw/developers.aspx#integration – SpoBo

関連する問題