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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2008, 11:54   #1
ben95
Новичок
Джуниор
 
Аватар для ben95
 
Регистрация: 22.12.2007
Сообщений: 204
По умолчанию сигнал WindowsBeep

Прива всем есть прога написанная мною для изучениея азбуки морже как сделать так чтоб при нажатии на кнопку на клавиатуре и держа её получался сигнал такой длины скока нажата кнопка ато получается пулеметная очередь
Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if  key=VK_UP then Windows.Beep(900,100);
end;
ben95 вне форума Ответить с цитированием
Старый 12.05.2008, 22:09   #2
delphin100
Он лайн
Форумчанин
 
Аватар для delphin100
 
Регистрация: 26.09.2007
Сообщений: 173
По умолчанию

Предлагаю так второе значение увеличивать из процедуры если кнопка нажата beep (Частота,продолжительность) или поставить его 1 тогда может будет более непрерывно.
delphin100 вне форума Ответить с цитированием
Старый 12.05.2008, 23:21   #3
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
Радость

Делается всё проще:
заводишь какую-нить переменную boolean например stop.
Код:
procedure Sound(Frequency, Duration: Integer);
asm
   push edx
   push eax
   mov eax, Win32Platform
   cmp eax, VER_PLATFORM_WIN32_NT
   jne @@9X
   call Windows.Beep
   ret
@@9X:
   pop eax
   pop edx
   push ebx
   push edx
   mov bx, ax
   mov ax, 34DDh
   mov dx, 0012h
   cmp dx, bx
   jnc @@2
   div bx
   mov bx, ax
   in al, 61h
   test al, 3
   jnz @@1
   or al, 3
   out 61h, al
   mov al, 0B6h
   out 43h, al
@@1:
   mov al, bl
   out 42h, al
   mov al, bh
   out 42h, al
   call Windows.Sleep
   in al, 61h
   and al, 0FCh
   out 61h, al
   jmp @@3
@@2:
   pop edx
@@3:
   pop ebx
end;
ассемблерная вставка работает быстрее

по нажатии на клавишу:
Код:
stop:=false;
repeat
  beep(900,100);
  appilcation.progressMegagress;  // не помню точно
until stop;
а по отпусканию (KeyUp):
Код:
stop:=true;
И должно быть норм)))
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг

Последний раз редактировалось Dj_smart; 13.05.2008 в 12:38.
Dj_smart вне форума Ответить с цитированием
Старый 13.05.2008, 13:31   #4
ben95
Новичок
Джуниор
 
Аватар для ben95
 
Регистрация: 22.12.2007
Сообщений: 204
По умолчанию

Цитата:
Сообщение от Dj_smart Посмотреть сообщение
Делается всё проще:
заводишь какую-нить переменную boolean например stop.
Код:
procedure Sound(Frequency, Duration: Integer);
asm
   push edx
   push eax
   mov eax, Win32Platform
   cmp eax, VER_PLATFORM_WIN32_NT
   jne @@9X
   call Windows.Beep
   ret
@@9X:
   pop eax
   pop edx
   push ebx
   push edx
   mov bx, ax
   mov ax, 34DDh
   mov dx, 0012h
   cmp dx, bx
   jnc @@2
   div bx
   mov bx, ax
   in al, 61h
   test al, 3
   jnz @@1
   or al, 3
   out 61h, al
   mov al, 0B6h
   out 43h, al
@@1:
   mov al, bl
   out 42h, al
   mov al, bh
   out 42h, al
   call Windows.Sleep
   in al, 61h
   and al, 0FCh
   out 61h, al
   jmp @@3
@@2:
   pop edx
@@3:
   pop ebx
end;
ассемблерная вставка работает быстрее

по нажатии на клавишу:
Код:
stop:=false;
repeat
  beep(900,100);
  appilcation.progressMegagress;  // не помню точно
until stop;
а по отпусканию (KeyUp):
Код:
stop:=true;
И должно быть норм)))
сенкс тока вопрос про встаку асем в дельфий она попрёт? сори за тупой вопрос
ДА и ещё я имел виду длину сигнала а не пулемет)
ben95 вне форума Ответить с цитированием
Старый 13.05.2008, 15:35   #5
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Цитата:
Сенкс
Незачто)))
Цитата:
Тока вопрос про встаку асем в дельфий она попрёт?
Попрёт, как танк на помидоры))))
Цитата:
ДА и ещё я имел виду длину сигнала а не пулемет
Если выставить время, можно и от паузы избавится.
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 13.05.2008, 16:35   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Кажется в винде после 2000 функция бипа должна получать заранее Duration, т.е длину. Так что ниче не выйдет. В асмовской той что дали тоже параметр Duration есть, то же самое.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 13.05.2008, 17:48   #7
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Можно заюзать GetAsyncKeyState и по таймеру проверять не нажата ли какая-то клавиша, если нажата - бипать дальше с duration скажем 10мс, но это какое-то корявое решение

Винда в любом случае будет посылать код нажатой клавиши постоянно прерывая его с определённым интервалом.
DirectInput вам в руки =)
пыщь
JTG вне форума Ответить с цитированием
Старый 13.05.2008, 18:18   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
DirectInput вам в руки =)
Не ругайся =)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 13.05.2008, 19:12   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

_________
пыщь
JTG вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
До проги не доходит сигнал выгрузки операционной системы Altera Общие вопросы Delphi 6 30.08.2008 18:03