触发 KeyDown 时发出蜂鸣声
Beeping while KeyDown is triggered
我的表单上有一个 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
聚焦)时它会发出蜂鸣声?
所以,我发现,为什么 它会发出哔哔声。这似乎是 TListView 组件的标准行为。当 TListView 中的一个项目被 select 编辑(并且 TListView 有焦点)时,任何字符输入都会触发 "select the typed item" 方法,该方法试图通过我们的输入查找和 select 项目。
这是我感兴趣的答案。为了制作工作热键(包括一键),我使用了下一个代码:
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 事件。
感谢您的帮助!
我的表单上有一个 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
聚焦)时它会发出蜂鸣声?
所以,我发现,为什么 它会发出哔哔声。这似乎是 TListView 组件的标准行为。当 TListView 中的一个项目被 select 编辑(并且 TListView 有焦点)时,任何字符输入都会触发 "select the typed item" 方法,该方法试图通过我们的输入查找和 select 项目。
这是我感兴趣的答案。为了制作工作热键(包括一键),我使用了下一个代码:
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 事件。
感谢您的帮助!