Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.49 MB
Время: 0.063 c
15-1175802908
ProgRAMmer Dimonych
2007-04-05 23:55
2007.04.29
Подскажите, как реализовать...


15-1175720351
Германн
2007-04-05 00:59
2007.04.29
Не долго музыка играла :(((


6-1162540138
sfn
2006-11-03 10:48
2007.04.29
ICS — TWSocket


4-1164992757
BKV
2006-12-01 20:05
2007.04.29
Как определить настоящие пути смапированного диска?


4-1165171568
Krab12345
2006-12-03 21:46
2007.04.29
Сокет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский