Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как оборвать проигрывание звука при помощи кнопки? [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 и, сообтветственно, вызовется твое событие, через которое у тебя не получалось. А сканировать клавиатуру в винде можно, но обычно это применяется в игрушках.


Наверх

Титульная страница Поиск, карта сайта Написать письмо