procedure TCzsclock.CheckBeep;
var
  h,m,s,ss: word;
begin
  DecodeTime(FNow,h,m,s,ss);
  if ((m=0) and (s=0)) or ((m=59) and ( s>=60-h)) then
    begin
      if FBeep then
        asm mov ax, 0e07h
        int 10h;
        end;
    end;
end;主要是((m=59) and ( s>=60-h)) 这是检测什么的
和那个汇编指令的含义

解决方案 »

  1.   

    这就是一个整点报时,不过你去掉后面的((m=59) and ( s>=60-h)) 一个条件应也可以啊
      

  2.   

    我现在懂了,是最后的条件((m=59) and ( s>=60-h)) 是控制响多少下的,没有错哦,
      

  3.   

    这段汇编可以变成mov ah, 0eh
    mov al, 07h
    int 10h;我想这样可能有些人能看出来了。int 10h 的 0eh功能号应该是电传方式写字符,这个东西很少有人用了。
    al寄存器的内容是 要写的asc码,
    asc码中 07h 是ring,就是铃!
    等效于 write(chr(7));另外 dos 你输入
    echo 然后按住alt再按小键盘的7,然后松手,回车
    你也能听到一声,他们都是利用了 chr(7)
      

  4.   

    对,就是10号中断,有好多呢,每个都不太一样,要查表。一般是通过al ah传递参数,ax是把它们和在一起写了。
    mengyun5005(梦云)说得对。((m=0) and (s=0)) or ((m=59) and ( s>=60-h))构思倒是挺巧妙。不过好像多响了一次,而且是提前响了。改为((m=0) and (s<h))是不是更好?
      

  5.   

    不过好像一运行就出错啊
    好像说什么read adress FFFFFFFF
      

  6.   

    另外如果改为write(chr(7));
    则出现io错误
      

  7.   

    windows 下面你该使用Beep 这类的函数。