请问如何实现提醒的功能??

时间:2022-07-24 18:53:53
我做了一个记事提醒的小程序,现在碰到个问题。
我想在某个时间(比如每天17点),弹出个对话框或者用其他方式提醒我该做某件事了。现在主要程序都编好了,就是不知道该怎么提醒我。我试过msgbox,但是优先级太低,如果我在干其他工作,msgbox无法置于最前方,起不到提醒的作用。
注:可以用声音提醒,但不能仅用声音。因为要考虑没有音箱或耳机的情况。

请问如何实现提醒的功能呢??

7 个解决方案

#1


可以做一个最前窗体.
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST = -1


Private Sub Form_Load()
Dim retValue As Long
retValue = SetWindowPos(Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, 1)

End Sub

#2


根据以上代码,当时间到就form1.show就可以了

#3


给你一个例子

Dim o, i

Private Declare Function SetWindowPos& Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)


Private Sub Form_Click()
Me.Visible = False
End Sub

Private Sub Form_Load()
o = 10
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3
End Sub

Private Sub Form_Resize()
    Label1.Width = Width - 400
    Label1.Height = Height - 1200
End Sub

Private Sub Label1_Click()
    Unload Me
End Sub

Private Sub Timer1_Timer()
    i = i + 1
    
    If i >= 60 * 60 Then
                    Me.Visible = True
                    Timer2.Enabled = True
                    Timer1.Enabled = False
                    i = 0
    End If
    
End Sub

Private Sub Timer2_Timer()

        If o <= 0 Then
                            o = 10
                            Timer2.Enabled = False
                            Me.Visible = False
                            Timer1.Enabled = True
                            Exit Sub
        End If
        
        o = o - 1
               
        Label1.Caption = "请注意休息啊,你需要休息拉!~ " & CStr(o)
        
End Sub

#4


//TO tztz520(午夜逛街) :
你的方法只能解决form没有最小化的情况,可以使窗体处于最前方。
form最小化之后,到指定时间,窗体只会在底端状态栏上闪烁,不会处于最前方。虽然能起到一定的提醒作用,但是效果不明显啊。

#5


//TO zcm123(抵制日货从我做起) :

谢谢你提供的这个例子。将Visible属性置为False倒是一种解决办法。
不过因为我的程序要最小化到系统托盘,所以在窗体最小化情况下,到指定时间将其恢复,并保持始终在最前,这个功能是一定要实现的。

#6


学学MSN,用FlashWindow

一个例子
http://mailgate.hongen.cn/pc/program/apitutor/api0007/api01.htm

#7


谢谢各位了!!

问题解决了.
我用SendMessage Me.hwnd, WM_SYSCOMMAND, SC_RESTORE, 0&实现了.
效果不太好.

lxcc(虫子|需要点勇气和信心) 给了我启发,打算有时间的话改成QQ那样,让他在系统托盘上闪烁.

#1


可以做一个最前窗体.
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST = -1


Private Sub Form_Load()
Dim retValue As Long
retValue = SetWindowPos(Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, 1)

End Sub

#2


根据以上代码,当时间到就form1.show就可以了

#3


给你一个例子

Dim o, i

Private Declare Function SetWindowPos& Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)


Private Sub Form_Click()
Me.Visible = False
End Sub

Private Sub Form_Load()
o = 10
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3
End Sub

Private Sub Form_Resize()
    Label1.Width = Width - 400
    Label1.Height = Height - 1200
End Sub

Private Sub Label1_Click()
    Unload Me
End Sub

Private Sub Timer1_Timer()
    i = i + 1
    
    If i >= 60 * 60 Then
                    Me.Visible = True
                    Timer2.Enabled = True
                    Timer1.Enabled = False
                    i = 0
    End If
    
End Sub

Private Sub Timer2_Timer()

        If o <= 0 Then
                            o = 10
                            Timer2.Enabled = False
                            Me.Visible = False
                            Timer1.Enabled = True
                            Exit Sub
        End If
        
        o = o - 1
               
        Label1.Caption = "请注意休息啊,你需要休息拉!~ " & CStr(o)
        
End Sub

#4


//TO tztz520(午夜逛街) :
你的方法只能解决form没有最小化的情况,可以使窗体处于最前方。
form最小化之后,到指定时间,窗体只会在底端状态栏上闪烁,不会处于最前方。虽然能起到一定的提醒作用,但是效果不明显啊。

#5


//TO zcm123(抵制日货从我做起) :

谢谢你提供的这个例子。将Visible属性置为False倒是一种解决办法。
不过因为我的程序要最小化到系统托盘,所以在窗体最小化情况下,到指定时间将其恢复,并保持始终在最前,这个功能是一定要实现的。

#6


学学MSN,用FlashWindow

一个例子
http://mailgate.hongen.cn/pc/program/apitutor/api0007/api01.htm

#7


谢谢各位了!!

问题解决了.
我用SendMessage Me.hwnd, WM_SYSCOMMAND, SC_RESTORE, 0&实现了.
效果不太好.

lxcc(虫子|需要点勇气和信心) 给了我启发,打算有时间的话改成QQ那样,让他在系统托盘上闪烁.