Конференция "Media" » нажатие клавиш и PlaySaund [D7, WinXP]
 
  • illuha © (30.07.11 11:45) [0]
    есть форма   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. Связав юзера или повыдергав ему все возможные "нажималки".

    )

    Это у тебя вообще что, пианино ?)
  • illuha © (03.08.11 20:36) [2]
    это для мелких такая прога, нажал клавишу а ана ему буковку показала и проговорила. Но так как мелкий очень, может нажать и держать.
  • Сергей М. © (04.08.11 09:27) [3]
    Ну так отслеживай КейАп-событие ..
    В нем взводи флаг что клавиша отжата. А в обработчике КейДаун сначала проверяй не взведен ли этот флаг. Если взведен, сбрасывай его и делай плейсаунд и пр., иначе ничего не делай.
    Кр.того, вряд ли разумно использовать SND_SYNC - прямо таки напрашивается SND_ASYNC
 
Конференция "Media" » нажатие клавиш и PlaySaund [D7, WinXP]
Есть новые Нет новых   [134430   +4][b:0][p:0.001]