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