в событии OnSetEditText у StringGrid проверяй свойство EditorMode:
Код:
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin
if not StringGrid1.EditorMode then
if Value<>'123' then
ShowMessage('Oops');
end;
т.е. когда оно станет false процесс редактирования завершен. значение помещается в ячейку.
See also
запомнить что было в ячейке до начала редактирования можно в событии OnGetEditText, чтобы его можно было восстановить в ячейке после неправильного редактирования, если это требуется.