-
есть форма Form1.KeyPreview:= true; отлавливает нажатие клавиш FormKeyDown в теле процедура PlaySaund. Проблема в следующем, пока играет звук все нажатия отлавливаются и встают в очередь, и потом всеравно отработают. Требуется блокировать нажатия пока не отработает текущая операция.
flag; dool:= true; // глобальная
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if flag then Key:= 0
else begin
// Form1.KeyPreview:= false; // не проходит
if LtrNum(Key)Then exit; // нужные клавиши
loadImageOfRess(Form1.Image1, true);
loadImageOfRess(Form1.Image2, false);
MayPlay;
// Form1.KeyPreview:= true;
end;
end;
function TForm1.MayPlay: bool;
begin
flag:= true; // не проходит
PlaySound(PChar('SND' + IntToStr(n)), 0, SND_RESOURCE or SND_SYNC);
flag:= false;
end; -
Сергей М. © (02.08.11 09:15) [1]
> Требуется блокировать нажатия
"Блокировать нажатия" можно минимум тремя способами:
1. Физически отключив клаву
2. Выковыряв клавиши из клавы или залив ее эпоксидной смолой.
3. Связав юзера или повыдергав ему все возможные "нажималки".
)
Это у тебя вообще что, пианино ?) -
это для мелких такая прога, нажал клавишу а ана ему буковку показала и проговорила. Но так как мелкий очень, может нажать и держать.
-
Сергей М. © (04.08.11 09:27) [3]Ну так отслеживай КейАп-событие ..
В нем взводи флаг что клавиша отжата. А в обработчике КейДаун сначала проверяй не взведен ли этот флаг. Если взведен, сбрасывай его и делай плейсаунд и пр., иначе ничего не делай.
Кр.того, вряд ли разумно использовать SND_SYNC - прямо таки напрашивается SND_ASYNC