TStringGrid не распознает VK_DELETE как нажатие клавиши - PullRequest
0 голосов
/ 03 мая 2019

У меня есть несколько TStringGrids внутри TTab, и я использовал
if (Key == VK_RETURN) в течение многих лет (это старое приложение) в качестве триггера для выполнения кода, относящегося к записи в ячейке.

Теперь я хотел бы, чтобы опция удаления содержимого ячейки была записана в нее пустой строкой, поэтому попытался использовать if (Key == VK_DELETE)

, но кнопка удаления вообще не вызывает событие OnKeyPress вмой случай.

Я надеялся захватить событие с помощью следующего кода, относящегося к конкретному активному Stringrid1

void __fastcall TPagesDlgLoadEditorFixed::StringGrid1KeyPress(TObject 
*Sender, char &Key)
{
   int Grid = 1;
   EntriesOnStringGrid(Key, Grid);
}

, и затем с помощью KeyPress передавался код, общий для всех StringGrids, следующим образом:

void TPagesDlgLoadEditorFixed::EntriesOnStringGrid(char &Key, int Grid)
{

 if (Key==VK_RETURN)
 {
   //code works fine
 }
 if (Key==VK_DELETE)
 {
   //code has no effect
 }

}

Однако, находясь в режиме отладки, можно увидеть, что событие StringGrid1KeyPress вообще не вызывается кнопкой «Удалить».

Любая рекомендация будет принята с благодарностью..

1 Ответ

0 голосов
/ 27 мая 2019

Обычно лучше использовать OnKeyUp и OnKeyDown при проверке кодов виртуальных ключей, а не OnKeyPress.

Поэтому использование этого должно решить вашу проблему, а затем обнаружит VK_DELETE, когданажал или отпустил.

...