Had a closer look at the sources today. Column ReadOnly issue left aside for the moment, it indeed fires correctly if the editor is already shown, either by setting goAlwaysShowEditor or by clicking the selected cell twice before entering the first key. Otherwise it will only fire at the second key. Reason is that in this case the editor is invoked by the grid's KeyPress handler by calling a method called EditorShowChar, which does not trigger it's own KeyPress and thus not your custom handler.
Next thing is that the editor's OnKeyPress is already hooked to a handler inside the grid called EditorKeyPress(). In this method there's a comment reading
// grid must get all keypresses, even if they are from the editor
followed by calling the grid's handler. So it seems to be a bad idea to just replace this method by your custom handler. You can, however, call this method from within your custom handler:
StringGrid1.EditorKeyPress(Sender, Key);
If you don't the grid will possibly not work as intended with key strokes like Esc and with a TDBGrid it won't check anymore if the key is accepted by the underlying field.
Given all this it might indeed not be a good idea to interfere with this rather complex arrangement but to use the grid's exposed OnKeyPress instead.