Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2007, 22:33   #1
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию Звуковое сообщение.

Такое вот дело, как-то сижу и небыло чем заниматься, давай делать че-нить на паскале и стыкнулся с одной маленькой проблемой.
Как в паскале зацыклить событие - звукой сигнал при нажатии кнопки. Но, чтобы прога себе работа и при нажатиях клавиатуры любой кнопки было звуковой сигнал.

Думал, думал, ниче не могу придумать.
Написал процедурку, правда только с одной кнопкой, но так и не смог сделать ее по кругу. Например, я использовал Ентер, когда нажимаю Ентер, появлятьеся звук-задержка на 1с-выключил звук. И то это было одноразово.

Блин ну и наплел же я. Думаю суть понята-звуковое сопровождение при нажатии любой кнопки.
Небесный вне форума Ответить с цитированием
Старый 11.10.2007, 07:30   #2
Трофимов Александр
Форумчанин
 
Аватар для Трофимов Александр
 
Регистрация: 03.11.2006
Сообщений: 321
По умолчанию

Напиши цикл Repeat....Untill и в нём обрабатывай нажатия клавиш.
Выход по Untill при нажатии определённой клавиши
Трофимов Александр вне форума Ответить с цитированием
Старый 11.10.2007, 07:33   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну вообще то мы делали так: Меняли вектор клавпрерывания (9H кажись) на свой обработчик, и там уже пишали сколько угодно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.10.2007, 08:38   #4
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Трофимов Александр Посмотреть сообщение
Напиши цикл Repeat....Untill и в нём обрабатывай нажатия клавиш.
Выход по Untill при нажатии определённой клавиши
Да пробовал!!! Вот только у меня же не только эта процедура должна выполняться, но и другие. Если зацыклить только эту, другие не будут выполняться.
Небесный вне форума Ответить с цитированием
Старый 11.10.2007, 16:36   #5
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

...Недавно в одной из тем рассматривалась чтение событий с клавиатуры, там я упоменул про keypressed, и незря, меня еще спросили зачем оно нужно... Вот подходящий пример.
Исходный код
Код:
 
program z123;
uses crt;
var
b:boolean;
ch:char;
t:integer;
begin
clrscr;
repeat
b:=keypressed;
if b=true then begin ch:=readkey;
case ch of
chr(13):t:=1;
chr(75):t:=2;
chr(77):t:=3;
chr(72):t:=4;
chr(80):t:=5;
end;
end;
case t of
1:sound(1000);
2:sound(2000);
3:sound(3000);
4:sound(4000);
5:sound(5000);
end;
delay(2000);
nosound;
until ch=chr(27);
end.
Я не маюсь бездельем, я от него тащусь!
Tayfun вне форума Ответить с цитированием
Старый 11.10.2007, 23:00   #6
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Tayfun огромное спасибо, я вообще давно уже искал, как можно использовать стрелочки. За это благодарство.

Но, я так понял, меня не совсем поняли.
Программа, работает себе, а звук себе, когда я нажимаю какие-то клавиши, тогда происходит звуковое сообщение.

В даном случае сам смысл программы не исполняеться пока я не нажму ескейп.
Даным способом можно было бы описать на каждую клавишу событие, но это же гемор, я вот голову ломаю, как сделать, чтобы процедурка звука работала не зависимо, как бы от хода программы, программа выполняеться и по ходу всегда активна процедура звука. И чтобы звук извлекался при нажитии любой клавиши.

Код:
Program stepeni;
 
Uses crt;
 
var
i,l,n:longint;
key:char;
b:boolean;
ch:char;
t:integer;
 
Procedure vvod_chisla_n;
begin
writeln('1*1 + 2*2 + 3*3 +..+ n*n = ?');
writeln;
write('‚ўҐ¤ЁвҐ "n": ');
readln(n);
end;
 
Procedure raschet;
begin
for i:=1 to n do
l:=l+i*i;
writeln('‚ Ёв®ЈҐ Ї®«гз Ґвмбп : ',l);
end;
 
Procedure zvyk_sobitie;
begin
repeat
b:=keypressed;
if b=true then
begin ch:=readkey;
case ch of
chr (13) :t:=1;
chr (75) :t:=2;
chr (77) :t:=3;
chr (72) :t:=4;
chr (80) :t:=5;
end;
end;
case t of
1:sound(1000);
2:sound(2000);
3:sound(3000);
4:sound(4000);
5:sound(5000);
end;
delay(2000);
nosound;
until ch=chr(27);
end;
end;
 
begin
clrscr;
zvyk_sobitie;
vvod_chisla_n;
raschet;
readln;
end.

Последний раз редактировалось Alex21; 24.10.2007 в 10:02. Причина: code
Небесный вне форума Ответить с цитированием
Старый 12.10.2007, 08:06   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Небесный, мона я угадаю :

Код:
 
uses crt;
var c:char;
begin
repeat
write(1);
if keypressed then begin
c:=Readkey;
sound(byte(c)*10);delay(1000);nosound;
end;
until c=#27
end.
Угадал?
I'm learning to live...

Последний раз редактировалось Alex21; 24.10.2007 в 10:02. Причина: code
Stilet вне форума Ответить с цитированием
Старый 12.10.2007, 09:28   #8
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Stilet это все тоже, эта процедурка не будет постоянно активна.

Цитата:
uses crt;
var c:char;
begin
repeat // начинаеться цыкл
write(1);
if keypressed then begin
c:=Readkey;
sound(byte(c)*10);delay(1000);nosou nd;
end;
until c=#27 // Будет ходит по кругу до
тех пор, пока не будет ESC
end.
Пока не нажму ESC программа не будет дальше продолжаться, тоесть, сам ход ее ибо мы зацыклили через репеат, нажму ESC ход продолжиться дальше, но тогда уже не будет звука.
Вот сдесь ты правильно сказал, только я не знаю, как это все оформить, не стыкался с этим.
Цитата:
вектор клавпрерывания
Слышал я краешком уха об этом, но как говорят, слышу звон и не знаю где он.

Последний раз редактировалось Небесный; 12.10.2007 в 09:35.
Небесный вне форума Ответить с цитированием
Старый 12.10.2007, 09:48   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты не понял... Это каркас.
Вот там где Writeln нуна писать свои действия которые закончив отработку проверят на нажатие клавиши и снова начнут работать.

Насчет прерывания не все просто, у мя примеров вроде не осталось...

Ты луче скажи какие действия ты хош выполнять параллельно с проверкой нажатия клавиши?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.10.2007, 10:14   #10
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Автору нужно некое подобие многозадачности, как с прерываниями сделать - не знаю )

Сам с таким когда-то сталкивался, когда надо было сделать фоновую музыку в игре, и циклы тут не помогут. Сделал тогда "супер-заумно через полную Ж" - используя либу псевдомногозадачности - код, зацикленно играющий музыку, выносился в процедуру MusicProc, основной код в MainProc, сама программа сводилась к виду типа

MakeTask(@MusicProc,<стек>);
MakeTask(@MainProc,<стек>);

--

нашел http://pascal.sources.ru/multtask/multi1.htm
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Icq сообщение Marsik Помощь студентам 2 10.04.2008 04:22
Как прочитать сообщение по ICQ? Иллидан Работа с сетью в Delphi 5 18.02.2008 18:33
Звуковое сопровождение при компиляции John_chek Общие вопросы Delphi 2 23.01.2008 12:36