![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как оборвать проигрывание звука при помощи кнопки? [D7, Win2k]
Slonco © (2004-10-18 10:44:00)Интересует метод обрывания цикла именно не через события (у меня так не получилось), а при помощи сканирования клавиатуры. Как вообще ее сканить? Я кроме страшных хуков через дыэлэлы ничего не нашел :(
Вот примерно так хочется сделать
inkey:=0;
while inkey=0 do begin
Windows.Beep(1000, 300);
Windows.Beep(2000, 300);
ScanKey;
end;
Есть ли такая функция ScanKey ? Я не смог найти :(
Допоможить будласка!
Дякую.
Slonco (2004-10-25 09:34:00) [1]Я решил проблему использованием библиотеки JEDI , а в частности JvThreadTimer - на событие OnTimer повесил свой код
procedure TalcAlertForm.JvThreadTimer1Timer(Sender: TObject);
begin
// Windows.Beep(1000, 300);
// Windows.Beep(2000, 300);
end;
Вот собственно и все. Всем спасибо!
abc (2004-10-19 21:07:00) [2]http://isv.iatp.org.ua/
Будильник v 1.2
Woolen (2004-10-19 12:21:00) [3]Форма по умолчанию не обрабатывает ввод с клавиатуры (KeyPreview установлен в False). Делаешь KeyPreview в True и все будет работать. Навероное... Если, конечно, ты этого еще не сделал...
Slonco (2004-10-18 16:05:00) [4]От реакции на кнопки я решил отказаться и оставить реакцию на клик.
Попробовал задать это проигрывание звука для модальной формы (OnActivate). В ответ на это форма отказалась закрываться :( Я уже теряюсь в догадках.
Slonco (2004-10-18 13:01:00) [5]
procedure TalMainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then Inkey:=1;
end;
Вот что я написал в обработчике.
Slonco (2004-10-18 12:52:00) [6]Так, вставил я Application.ProcessMessages. Попробовал прицепить на события формы нажатия на кнопки OnKeyPress/OnKeyDown- ничего не вышло. Реакции на кнопки нет. А вот OnClick- сработало!
Что я сделал не так?
Slonco (2004-10-18 11:13:00) [7]Спасибо, сканирование клавиатуры как таковое мне не нужно. А вот в месте Не забудь Application.ProcessMessages вставить в цикл.пожалуйста поподробнее :))
Очень интересно.
Woolen (2004-10-18 11:07:00) [8]Если интересует именно сканирование клавиатуры, можешь попробовать IDirectInputDevice8::GetDeviceState. Хотя для этого, на Win2k у тебя должен быть нашлепнуть DirectX 8, а как делать в 7, которая в 2000, я не помню.
Woolen (2004-10-18 10:57:00) [9]Попробуй именно через события. Не забудь Application.ProcessMessages вставить в цикл. В этом методе вызывается обработка сообщений, в т.ч. и о нажатии клавиатуры. И при поступлении сообщения о нажатии оно будет прочитано в ближайшем Application.ProcessMessages и, сообтветственно, вызовется твое событие, через которое у тебя не получалось. А сканировать клавиатуру в винде можно, но обычно это применяется в игрушках.