-2

我的表单上有一个TListView(它一直都是专注的)和一个OnKeyDown事件处理程序(它的KeyPreview属性为真)。

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焦点)时它会发出哔哔声?

4

1 回答 1

0

所以,我发现了为什么它会发出哔哔声。这似乎是 TListView 组件的标准行为。When one item in TListView is selected (and TListView has focus), any character input triggers "select the typed item" method, that trying to find and select item by our input.

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

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 事件。

感谢您的帮助!

于 2018-11-29T12:28:12.143 回答