У меня такая же проблема, но более простое решение, так как я заставляю пользователя нажимать клавишу Enter ...
Хитрость : я не позволяю пользователю переходить на другую ячейку, пока она редактирует, поэтому я заставляю пользователя нажимать Ввод / Ввод, чтобы завершить редактирование, затем я разрешаю перейти на другую ячейку.
Плохая часть в том, что OnKeyPress происходит до OnSetEditText, поэтому я попытался с OnKeyUp ...
И я обнаружил, что при редактировании ячейки, после нажатия Enter / Intro, OnKeyUp не запускается ... это ошибка на VCL ... клавиша освобождается, а OnKeyUp не запускается.
Итак, я делаю еще один трюк, чтобы обойти это ... использовать таймер, чтобы немного отличаться от того, что я бы сделал, поэтому я даю время для события OnSetEditText раньше.
Позвольте мне объяснить, что я сделал для успеха ...
Я заблокировал выбор другой ячейки, поместив код на OnSelectCell, очень похожий на этот:
CanSelect:=Not UserIsEditingOneCell;
И на OnSetEditText я поместил код, подобный этому:
UserIsEditingOneCell:=True;
Итак, теперь необходимо определить, когда пользователь нажимает Enter / Intro ... и я обнаружил ужасную вещь, как я сказал ... OnKeyUp не запускается для такой клавиши ... так что я буду имитировать это с помощью таймера и OnKeyPress, потому что OnKeyPress срабатывает, а OnKeyUp нет, для клавиши Enter ...
Итак, на OnKeyPress я поставил что-то вроде:
TheTimerThatIndicatesUserHasPressEnter.Interval:=1; // As soon as posible
TheTimerThatIndicatesUserHasPressEnter.Enabled:=True; // But after event OnSetEditText is fired, so not jsut now, let some time pass
На таком событии таймера:
UserIsEditingOneCell:=False;
// Do whatever needed just after the user has finished editing a cell
Это работает, но я знаю, что это ужасно, потому что мне нужно использовать таймер ... но я не знаю лучшего способа ... и так как мне нужно не позволить пользователю перейти в другую ячейку, пока та, которая редактирование не имеет допустимого значения ... я могу использовать это.
Почему, черт возьми, нет такого события, как OnEndingEditing?
PD: Я также заметил, что OnSetEditText запускается несколько раз для каждой нажатой клавиши и с различным значением в параметре Value ... по крайней мере при работе со значением EditMask '00: 00: 00 ', установленным для события OnGetEditMask.