我做的闹钟为什么会这样子?

liuer 2001-11-10 10:49:47
我是想做一个整点报时的闹钟,时间是几点它就响几下声音,可是为什么下面的程序好象没错,但却始终不是按照我的意图去执行呢?


Private Sub Command2_Click()
End
End Sub

Private Sub Timer1_Timer()

Dim i, h, m, s
h = Val(Hour(Time))
m = Val(Minute(Time))
s = Val(Second(Time))
Label1.Caption = Time

If s = 0 And m = 0 And h <> 0 Then

For i = 1 To h '为什么下面这音乐只响一次呢?
MediaPlayer1.FileName = "D:\WINDOWS\Media\Windows XP Logon Sound.wav"
Next i '我的意思是整点报时,时间是几点就响几声,可是为什么只想一声就完了?

End If

If m = 0 And h = 0 Then
For i = 1 To 24
MediaPlayer1.FileName = "D:\WINDOWS\Media\Windows XP Logon Sound.wav"
Next i
End If

If s = 0 And m = 30 Then
MediaPlayer1.FileName = "D:\WINDOWS\Media\Windows XP Logon Sound.wav"
End If

End Sub
...全文
412 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuer 2001-11-21
  • 打赏
  • 举报
回复
呵呵,谢谢浪潮一号了,可惜我的分已经分完了,因为分分的时候没看到这贴,所以给分你2分,以后补起来。
tidewave 2001-11-17
  • 打赏
  • 举报
回复
我给你解释一下,setwindowpos是一个函数,这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。该函数里面有几个参数:参数指的意思如下
hwnd ----------- Long,欲定位的窗口的句柄
hWndInsertAfter - Long,窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一:
HWND_BOTTOM
将窗口置于窗口列表底部
HWND_TOP
将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序
HWND_TOPMOST
将窗口置于列表顶部,并位于任何最顶部窗口的前面
HWND_NOTOPMOST
将窗口置于列表顶部,并位于任何最顶部窗口的后面

x -------------- Long,窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示

y -------------- Long,窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示

cx ------------- Long,指定新的窗口宽度

cy ------------- Long,指定新的窗口高度

wFlags --------- Long,包含了旗标的一个整数
SWP_DRAWFRAME
围绕窗口画一个框
SWP_HIDEWINDOW
隐藏窗口
SWP_NOACTIVATE
不激活窗口
SWP_NOMOVE
保持当前位置(x和y设定将被忽略)
SWP_NOREDRAW
窗口不自动重画
SWP_NOSIZE
保持当前大小(cx和cy会被忽略)
SWP_NOZORDER
保持窗口在列表的当前位置(hWndInsertAfter将被忽略)
SWP_SHOWWINDOW
显示窗口
SWP_FRAMECHANGED
强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变

看过之后明白多少,别忘了给我加分
liuer 2001-11-13
  • 打赏
  • 举报
回复
好好,给分了
vcbug 2001-11-12
  • 打赏
  • 举报
回复
atie
xxlroad 2001-11-11
  • 打赏
  • 举报
回复
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1
Const FLAG = SWP_NOMOVE Or SWP_NOSIZE
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const HWND_TOP = 0
Const HWND_BOTTOM = 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
'Command1使窗口在最前,Command2复原
Private Sub Command1_Click()
Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAG)
End Sub

Private Sub Command2_Click()
Call SetWindowPos(Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAG)
End Sub




xxlroad 2001-11-11
  • 打赏
  • 举报
回复
'始终处于最前面
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Declare Sub 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_Activate()

SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub

liuer 2001-11-11
  • 打赏
  • 举报
回复
谢谢楼上各位的指点,现在又有新问题了,我想把闹钟始终显示在屏墓右上角,可是当别的程序运行时,就把它蔗住了,请问如何才能使闹钟始终处于最前面?
Wesely 2001-11-11
  • 打赏
  • 举报
回复
反正就是调用dll里面的函数啦。

去找本API的书看看。
liuer 2001-11-11
  • 打赏
  • 举报
回复
我说的是看懂,不是说复制,事实上我是复制过去,果然成功地达到了目的,可是我不知道为什么要这么做呀?上面的大虾们可否逐句解释一下?谢谢
Wesely 2001-11-11
  • 打赏
  • 举报
回复
Ctrl-C + Ctrl-V ,有什么难的?
liuer 2001-11-11
  • 打赏
  • 举报
回复
受不了啦!我看不懂,好难哦.
liuer 2001-11-10
  • 打赏
  • 举报
回复
If s = 0 And m = 0 And h <> 0 Then
For i = 1 To h
MediaPlayer1.FileName = "D:\WINDOWS\Media\Windows XP Logon Sound.wav"
Next i
EndIf

为什么这段循环不能正确执行呢?
liuer 2001-11-10
  • 打赏
  • 举报
回复
谢谢上面两位,照着丛子说的做,果然很正常了,可是我不明白的是,我上面的代码明明可以做到这点的,可为什么它就不能事实上做到呢?能帮我指出其中的错误在哪里吗?谢谢.
coolant_lai 2001-11-10
  • 打赏
  • 举报
回复
不要用for next直按设置
MediaPlayer1.PlayCount = ?
?是你想要播放的次数
lou_df 2001-11-10
  • 打赏
  • 举报
回复
声音播放要设置成同时播放,否则只能播一个声音文件.
feihong0233 2001-11-10
  • 打赏
  • 举报
回复
MediaPlayer1.FileName = "D:\WINDOWS\Media\Windows XP Logon Sound.wav"

For i = 1 To h '为什么下面这音乐只响一次呢?
MediaPlayer1.Play
Sleep 1000
Next i

'试试这样,Sleep是一个API

feihong0233 2001-11-10
  • 打赏
  • 举报
回复
MediaPlayer1.FileName是媒体文件名,是一个属性。
并不是播放的事件,
因为你的AutoPlay设为True才会播放,
你在循环里重新设置MediaPlayer1.FileName并没有什么意义。
liuer 2001-11-10
  • 打赏
  • 举报
回复
看样子只能在MEDIAPLAYER1上面的办法了.
Wesely 2001-11-10
  • 打赏
  • 举报
回复
For i = 1 To h '为什么下面这音乐只响一次呢?
MediaPlayer1.FileName = "D:\WINDOWS\Media\Windows XP Logon Sound.wav"
Next i

这是一个循环,无间隔的执行MediaPlayer1.FileName =.... 多次。
tidewave 2001-11-10
  • 打赏
  • 举报
回复
你的Timer1相隔时间可能太短了,它来不急执行完你的for 语句,可能就执行第二次timer1了,你把timer1.interval设置长一点看看。

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧