div.main {margin-left: 20pt; margin-right: 20pt} Как управлять спикером под 9х из Дельфи
Прислал: Ненашев Илья
Николаевич
Под WinNT/2000/XP вы можете использовать Beep(Tone, Duration) (задавать
тон и продолжительность звучания). А под 9.x/Me эта функция не
реализована, но можно командовать железом через порты, и сделать
универсальную:
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.
|