Solo para ejemplificar lo ya dicho por Dec;
Código Delphi
[-]function Thread(dwValue: Cardinal): Cardinal; stdcall;
begin
Windows.Beep(Word(dwValue), dwValue shr 16);
end;
function Beep(wFreq, wDuration: Word): Cardinal;
begin
Result := CreateThread(nil, 0, @Thread, Ptr(wFreq or (wDuration shl 16)), 0, PDWORD(0)^);
end;
Si el caso es usar
Beep, desarrollo la idea;
Código Delphi
[-]procedure TForm1.Button1Click(Sender: TObject);
begin
Beep(100, 1000); end;
procedure TForm1.Button2Click(Sender: TObject); var hBeep: Cardinal;
begin
Timer1.Enabled := True;
hBeep := Beep(1000, 3000);
while LongBool(WaitForSingleObject(hBeep, 10)) do
Application.ProcessMessages;
Timer1.Enabled := False;
end;
procedure TForm1.Button3Click(Sender: TObject); begin
ProgressBar1.Max := 40;
ProgressBar1.Position := 0;
Beep(500, ProgressBar1.Max * 100);
while ProgressBar1.Position < ProgressBar1.Max do
begin
ProgressBar1.Position := ProgressBar1.Position + 1;
Application.ProcessMessages;
Sleep(100);
end;
end;
El anterior "Beep" modificado solo produce sonidos con duración máxima de 65.5 segundos y una milesima de exactitud, la siguiente dura hasta 10.9 minutos con una centesima de exactitud;
Código Delphi
[-]function Thread(dwValue: Cardinal): Cardinal; stdcall;
begin
Windows.Beep(Word(dwValue), (dwValue shr 16) * 10);
end;
function Beep(wFreq: Word; wDuration: Cardinal): Cardinal;
begin
Result := CreateThread(nil, 0, @Thread, Ptr(wFreq or ((wDuration div 10) shl 16)), 0, PDWORD(0)^);
end;
Saludos