触发KeyDown时发出蜂鸣声

时间:2018-11-29 09:03:47

标签: c++ c++builder-10.2-tokyo

我在我的窗体上有一个TListView(一直专注)和一个OnKeyDown事件处理程序(其KeyPreview属性为true)。

playlist是我的TListView组件(Style = vsReport)。

void __fastcall Tmform::mformKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
  if(Shift.Contains(ssCtrl))            // hotkeys with CTRL
  {
     switch(Key)
     {
        case vkF: findDoublesbtnClick(mform);  break;        // [FIND TWINS]
        case vkD: dbsClick(mform);             break;        // [DELETE BAD SONGS]
        case vkA: playlist->SelectAll();       break;        // [CTRL + A]
        case vkS: settingsClick(mform);        break;        // [SETTINGS]
     }
  }
  else                                  // just keys
  {
     switch(Key)
     {
        case vkReturn:  if(playlist->SelCount) pl.refreshSong();        break;   // [ENTER]
        case vkDelete:   af.deleteFiles();      break;        // [DELETE]
        case vkSpace:
        case vkNumpad3:  pl.playPauseResume();  break;
        case vkSubtract: prevbtnClick(mform);   break;        // [PREVIOUS]
        case vkAdd:      nextbtnClick(mform);   break;        // [NEXT]
        case vkC:        counterClick(mform);   break;        // [LISTENINGS WIN]
     }
}

为什么当我按任意键(将TListView对准时)会发出蜂鸣声?

1 个答案:

答案 0 :(得分:0)

因此,我发现为什么会发出哔声。这似乎是TListView组件的标准行为。当选中TListView中的一项(并且TListView具有焦点)时,任何字符输入都会触发“选择键入的项”方法,该方法试图通过我们的输入查找和选择项。

这是我感兴趣的答案。为了制作工作热键(包括一键式),我使用了下一个代码:

void __fastcall TForm1::ListViewKeyPress(TObject *Sender, System::WideChar &Key)
{  Key = 0; }     // here TListView calls "find" method. I reset Key value,
                  // thus I have only vkCode for FormKeyDown which triggers
                  // after FormKeyPress
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
    if (Shift.Contains(ssAlt) && Key == vkF)                // use any key or shortcut
    {  Form1->Color = RGB(random(255), 0, 0);  return; }    // you wish
    if (Key == vkF)
       Form1->Color = RGB(0, random(255), 0);
    if (Key == vkSpace)
       Form1->Color = RGB(0, 0, random(255));
}

它适用于所有现有的PC键盘布局。但是使用“ alt”和“ win”键仍会发出哔声,因为任何键 使用'alt'或'win'不会触发ListViewKeyPress事件。

感谢您的帮助!