2012-03-14 2 views
0

Я придумал следующий код для создания эффекта «GROWL», который вы видите на MAC-адресах и некоторых сайтах jquery. (например, что-то вроде этого можно найти HERE. Код, который я использую, отлично работает и отображает сообщение (-ы) просто отлично. Однако проблема, с которой мне трудно работать, заключается в том, как отображать текущее сообщение ВЫШЕ каждое предыдущее сообщение вот еще на экране и с таймером для каждого сообщения, которое выскакивает в настоящее время он закрывает все окна сообщений одновременноЭффект GROWL в приложении VB.net

код это:..

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

Всего голов, я считаю, Growl для Windows, и рычать как поддержка ГНТП. Это означает, что вы можете просто реализовать библиотеку GNTP VB (или использовать существующую) и поговорить с ними. :)

+0

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