我在我的窗体上有一个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
对准时)会发出蜂鸣声?
答案 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事件。
感谢您的帮助!