![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите как правильно задекларировать процедуру. [D7, XP]
vegarulez © (2007-04-10 14:53:00)Есть вот такой код чтобы спекармауса заставить пикнуть.
Не знаю как процедуру задекларировать в декларации процедур - подскажите плиз.
Procedure BeepEx(Freq: Word; Duration: Integer);
var
Ver: TOsVersionInfo;
begin
Ver.dwOSVersionInfoSize := SizeOf(Ver);
GetVersionEx(Ver);
if Ver.dwPlatformId = VER_PLATFORM_WIN32_NT then
Windows.Beep(Freq, Duration)
else begin
asm
movzx ecx, Freq
mov eax, 1193180 // тактовая частота
sub edx, edx
div ecx // преобразование частоты в делитель
mov ecx, eax
mov al,0b6H
out 43H,al // управляющие слово
mov al,cl
out 42h,al // младший байт делителя
mov al,ch
out 42h,al // старший байт делителя
in al,61H
or al,03H
out 61H,al // включить звук
end;
sleep(Duration); // пауза на время звучани
asm
in al,61H
and al,0fcH
out 61H,al // выключить звук по окончанию Duration
end;
end;
end;
icWasya (2007-04-10 18:52:00) [1]по умолчанию несколько первых параметров передаются через регистры,
поэтому форвард процедуры лучше записать так
Tform1 = ...
...
Procedure BeepEx(Freq: Word; Duration: Integer); stdcall;
...
end;
чтобы правильно сработало
movzx ecx, Freq
Сергей М. (2007-04-10 15:09:00) [2]
> чото звука не слышно
Домой он торопится)... Не до звука ему, "спекармаусу" этому)
vegarulez (2007-04-10 15:06:00) [3]Сергей М. © (10.04.07 15:03) [8]
Тороплюсь домой не до лексеики
vegarulez (2007-04-10 15:05:00) [4]Вроде скомпилился... но чото звука не слышно... дома ещё попробую :)
Сергей М. (2007-04-10 15:03:00) [5]
> Понил... попробую счаз...
>
У "реальных пацанов" сейчас не в моде идиотское коверканье языка)
Сергей М. (2007-04-10 15:02:00) [6]Procedure TForm1.BeepEx(Freq: Word; Duration: Integer);
!!!!!
vegarulez (2007-04-10 15:02:00) [7]Понил... попробую счаз...
Сергей М. (2007-04-10 15:01:00) [8]Паскаль-то знаешь ?
Нет, не знаешь.
И "спекармаус" здесь совершенно ни причем.
Декларация идентификатора должна предшествоватьего использованию !
vegarulez (2007-04-10 15:00:00) [9]Сергей М. © (10.04.07 14:58) [2]
Это Очепятка или Описка... )
Сергей М. (2007-04-10 14:58:00) [10]
> спекармаус
А эт что за зверь ?)
vegarulez (2007-04-10 14:58:00) [11]так я её и прописываю - ругается....
Подскажите что не так...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
Procedure BeepEx(Freq: Word; Duration: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
BeepEx(50,50);
end;
Procedure BeepEx(Freq: Word; Duration: Integer);
var
Ver: TOsVersionInfo;
begin
Ver.dwOSVersionInfoSize := SizeOf(Ver);
GetVersionEx(Ver);
if Ver.dwPlatformId = VER_PLATFORM_WIN32_NT then
Windows.Beep(Freq, Duration)
else begin
asm
movzx ecx, Freq
mov eax, 1193180 // тактовая частота
sub edx, edx
div ecx // преобразование частоты в делитель
mov ecx, eax
mov al,0b6H
out 43H,al // управляющие слово
mov al,cl
out 42h,al // младший байт делителя
mov al,ch
out 42h,al // старший байт делителя
in al,61H
or al,03H
out 61H,al // включить звук
end;
sleep(Duration); // пауза на время звучани
asm
in al,61H
and al,0fcH
out 61H,al // выключить звук по окончанию Duration
end;
end;
end;
end.
Сергей М. (2007-04-10 14:57:00) [12]Вот прямо так и "задекларировать" - см. первая строчка в твоем коде