Форум: "Начинающим";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
ВнизПодскажите как правильно задекларировать процедуру. Найти похожие ветки
← →
vegarulez © (2007-04-10 14:53) [0]Есть вот такой код чтобы спекармауса заставить пикнуть.
Не знаю как процедуру задекларировать в декларации процедур - подскажите плиз.
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;
← →
Сергей М. © (2007-04-10 14:57) [1]Вот прямо так и "задекларировать" - см. первая строчка в твоем коде
← →
Сергей М. © (2007-04-10 14:58) [2]
> спекармаус
А эт что за зверь ?)
← →
vegarulez © (2007-04-10 14:58) [3]так я её и прописываю - ругается....
Подскажите что не так...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.
← →
vegarulez © (2007-04-10 15:00) [4]Сергей М. © (10.04.07 14:58) [2]
Это Очепятка или Описка... )
← →
Сергей М. © (2007-04-10 15:01) [5]Паскаль-то знаешь ?
Нет, не знаешь.
И "спекармаус" здесь совершенно ни причем.
Декларация идентификатора должна предшествовать его использованию !
← →
Сергей М. © (2007-04-10 15:02) [6]Procedure TForm1.BeepEx(Freq: Word; Duration: Integer);
!!!!!
← →
vegarulez © (2007-04-10 15:02) [7]Понил... попробую счаз...
← →
Сергей М. © (2007-04-10 15:03) [8]
> Понил... попробую счаз...
>
У "реальных пацанов" сейчас не в моде идиотское коверканье языка)
← →
vegarulez © (2007-04-10 15:05) [9]Вроде скомпилился... но чото звука не слышно... дома ещё попробую :)
← →
vegarulez © (2007-04-10 15:06) [10]Сергей М. © (10.04.07 15:03) [8]
Тороплюсь домой не до лексеики
← →
Сергей М. © (2007-04-10 15:09) [11]
> чото звука не слышно
Домой он торопится)... Не до звука ему, "спекармаусу" этому)
← →
icWasya © (2007-04-10 18:52) [12]по умолчанию несколько первых параметров передаются через регистры,
поэтому форвард процедуры лучше записать так
Tform1 = ...
...
Procedure BeepEx(Freq: Word; Duration: Integer);stdcall;
...
end;
чтобы правильно сработало
movzx ecx, Freq
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.062 c