![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Capitan Nemo |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
Кому не трудно, выделите , пожалуйста, минут 10-15 своего времени...
с этим вопросом уже обращался, с тех пор вычитал немерено разной инфы, скачал много модулей, но недостаточно моих знаний, чтоб это понять! а курсовик сделать надо... нужно сделать, чтоб при нажатии клавиши клавиатуры воспроизводился звук, например sound(200), а при отпускании клавиши прекращался... Я находил несколько модулей, в которых есть такая возможность... но как конкретно - не могу понять... вот модули, в которых это есть: http://forum.sources.ru/index.php?showtopic=84101 http://www.ishodniki.ru/list/info.php?id=3889 не кидайте, пожалуйста, ссылки на какой-нибудь очередной модуль или типа того... помогите, пожалуйста, для конкретно моей работы. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Я же по-моему тебе говорил (или не тебе?), как это можно сделать: читаешь скан-код клавиши, если он меньше 128, значит, клавиша нажата - запускаешь звук... Если же скан-код больше 128, значит клавиша отпущена, звук надо останавливать...
|
Capitan Nemo |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
сканкод считывается через readkey?
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Нет... Для этого надо писать или обработчик прерывания, или через массив Port ...
|
Capitan Nemo |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
а прерывание, как я понимаю через asm?
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Совсем не обязательно... Вот тут, например, смотри в аттаче, как получают скан-код:
прерывания |
Capitan Nemo |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
пытаюсь разобраться с кодом - но многое непонятно...
не смог понять что делает процедура New9... что необходимо сделать мне для считывания скан-кода? Scan := Port[ $60 ] - здесь что-то инициализируется? ЗЫ был бы безумно признателен, если б кто-нибудь набросал код необходимый мне... ну не как ен могу разобраться... не мой это уровень... мне препод сказал: "не сделаешь это - больше 4 не поставлю"... но он когда это говорил - был уверен, что функция keypressed возвращает состояние клавиши (нажата или нет в данный момент)... Возможно, завтра у меня все и так разрулится... а возможно нет... поэтому очень необходимо все-таки реализовать поставленную задачу... |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата Scan := Port[ $60 ] - здесь что-то инициализируется? Здесь Скан-код нажатой (или отпущенной) клавиши записывается в переменную Scan... Все, его можно анализировать! Только делать это желательно в основной программе, и уж тем более включать/выключать звук - это довольно длительные действия, а процедура обработки прерывания должна как можно быстрее возвращать управление... Поэтому переменную Scan описывай глобально, и как только действия по нажатию/отпусканию произведены (т.е., ты поймал момент и включил/выключил звук), Scan обнуляй... Сейчас покажу... Добавлено через 15 мин. Вот, смотри: uses dos, crt; Жми кнопку, выйдет сообщение, что нажал. Пока не отпустишь - больше никаких сообщений не будет. Вместо вывода сообщения поставь то, что закомментировано. Вот и все... P.S. Могут быть проблемы с F11, F12 - у них разные скан-коды на разных клавиатурах... Сообщение отредактировано: volvo - 6.06.2007 22:50 |
Capitan Nemo |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
огромнейшее спасибо!!!!!
наберусь наглости попросить несколько комментариев по основным этапам сего действия... Чтоб я хоть мог объяснить как я это сделал) |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Комментарии добавлены...
|
Capitan Nemo |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
Огромнейшее спасибо!!!
Вы спасли брянского студента от мозголюбства от препода)) |
Capitan Nemo |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
встроил эту штуку в свою программу...
все работает. но с багом... иногда, когда нажму на клавишу - звук начинается, отпускаю - он не прерывается... если еще раз нажму на эту клавишу и подержу подольше - все нормально становится... что это может быть, не знаете? |
Capitan Nemo |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
все, разобрался, все исправно работает)
только один нюанс: почему, когда нажимаешь клавиши раз в пятый в колонках раздается звук... кстати, так же и с программой, описанной выше volvo Добавлено через 3 мин. и еще вопрос. на этот раз уж точно последний) как установить задержку на определенное число миллисекунд, кроме как через delay? |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Потому, что я совсем забыл чистить буфер клавиатуры... Когда ты нажимаешь клавишу, ее Ascii-код попадает в буфер, однако оттуда ничем не читается. Буфер переполняется, и начинается писк.
|
Capitan Nemo |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
и как это исправить? как очистить буфер?
Добавлено через 11 мин. readkey, по ходу) Добавлено через 2 мин. а насчет задержки вот что мне нужно: при входе в цикл, если клавиша нажата - я засекаю системное время, при выходе - когда клавиша отжата - засекаю время... отнимаю от конечного начальное, умножаю секунды, прибавляю миллисек, в общем, получаю длительность в миллисекундах.... затем, в другой процедуре я использую эту длительность для воспроизведения... если ставлю delay(кол-во миллисекунд) он делает не такую паузу, как надо... слишком быстро он, не по кол-ву миллисекунд... что можно сделать? |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Зайди сюда и посмотри, что есть для работы со временем:
http://volvo71.narod.ru/time_count.htm |
Capitan Nemo |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
спасибо большое, пригодилась ссылка...
все-таки остается неясным. почему delay(ms) делает задержку не на ровно ms времени. а значительно меньше? можно ли как-нибудь точно сделать? |
Capitan Nemo |
![]()
Сообщение
#18
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
пошарил по форуму, нашел)
спасибо за помощь! |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 11:21 |