Итак, я выяснил, почему издает звуковой сигнал.Кажется, это стандартное поведение компонента 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));
}
Он работает со всеми существующими раскладками клавиатуры ПК.Но с клавишами «alt» и «win» все еще подается звуковой сигнал, потому что любая клавиша с «alt» или «win» не вызывает событие ListViewKeyPress.
Спасибо за вашу помощь!