Кодирование в Delphi, присоединение обработчика события OnKeyPress к TStringGrid:
Событие OnKeyPress срабатывает до того, как ячейка сетки, в которую вводит пользователь, фактически обновит свое значение с нажатой клавишей.Это, очевидно, проблема, когда я хочу узнать, что содержимое этой ячейки в данный момент , как, например, пользователь изменяет его.
"Взломанное" решение простое, если вы не рассматриваете каждую деталь: просто возьмите значение из ячейки и, поскольку событие OnKeyPress приходит вместе с параметром Key , добавьте это значение в конец - теперь у вас есть текущее значениеклетка!
Ложь.Что делать, если пользователь выделил весь текст в ячейке (например, «foo») и теперь он печатает «b».Поскольку они выбрали текст, он будет удален и заменен буквой «b».Однако значение ячейки все равно будет отображаться как «foo» в OnKeyPress, а значение Key будет равно «b», поэтому приведенная выше логика заставит приложение сделать вывод, что ячейка теперь содержит »foob ", что, как мы знаем, не соответствует действительности.
Итак. Кто-нибудь знает, как обойти эту проблему?Есть ли способ заставить OnKeyPress реагировать после содержимого сетки, было обновлено, или, возможно, способ принудительного обновления в начале обработчика?Я отчаянно избегаю использования события OnKeyUp здесь, поэтому любые предложения, кроме этого, будут с благодарностью.