Прислал: Ненашев Илья Николаевич
Под WinNT/2000/XP вы можете использовать Beep(Tone, Duration) (задавать тон и продолжительность звучания). А под 9.x/Me эта функция не реализована, но можно командовать железом через порты, и сделать универсальную:
Code: |
unit BeepUnit;
procedure Beep(Tone, Duration: Word); // универсальная - версию виндовса проверяет
procedure Sound(Freq : Word); procedure NoSound;
procedure SetPort(address, Value:Word); function GetPort(address:word):word;
implementation
procedure SetPort(address, Value:Word); var bValue: byte; begin bValue := trunc(Value and 255); asm mov dx, address mov al, bValue out dx, al end; end;
function GetPort(address:word):word; var bValue: byte; begin asm mov dx, address in al, dx mov bValue, al end; GetPort := bValue; end;
procedure Sound(Freq : Word); var B : Byte; begin if Freq > 18 then begin Freq := Word(1193181 div LongInt(Freq)); B := Byte(GetPort($61)); if (B and 3) = 0 then begin SetPort($61, Word(B or 3)); SetPort($43, $B6); end; SetPort($42, Freq); SetPort($42, Freq shr 8); end; end;
procedure NoSound; var Value: Word; begin Value := GetPort($61) and $FC; SetPort($61, Value); end;
procedure Beep(Tone, Duration: Word); begin if SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT then Windows.Beep(Tone, Duration) else begin Sound(Tone); Windows.Sleep(Duration); NoSound; end; end;
end. |
Взято из forum.sources.ru
- Назад
- Вперёд >>
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!