About escape:
If that is OnKeyDown in a SynEdit/Memo, then make sure escape is not used by SynEdit.KeyStrokes. If it is, SynEdit will catch it in KeyDown, and there will indeed be no KeyPress for it. (as for any other control sequence that SynEdit.KeyStrokes reacts to)