Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.29;
Скачать: CL | DM;

Вниз

Подскажите как правильно задекларировать процедуру.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.073 c
15-1175448523
den303
2007-04-01 21:28
2007.04.29
Нужен файл из дистриба BDS 06


15-1175791222
без имени
2007-04-05 20:40
2007.04.29
зависло! А как выключить???


2-1176124563
fear
2007-04-09 17:16
2007.04.29
setlength


2-1175797817
..::KraN::..
2007-04-05 22:30
2007.04.29
CD-ROM


3-1170860196
valua
2007-02-07 17:56
2007.04.29
Хранимая процедура : выбор записей + количество по полю