Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите как правильно задекларировать процедуру. [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]

Вот прямо так и "задекларировать" - см. первая строчка в твоем коде


Наверх

Титульная страница Поиск, карта сайта Написать письмо