OnEditingDone fires for me (Lazarus trunk, fpc 3.0.0, 32-bit, win7).
Mind you, some of your logic is plain wrong.
E.g. if I enter in a blank edit a '-', then select the text, press '-' again, it tells me I cannot have 2 '-' keys. This is wrong because the '-' i entered would overwrite the selected text anyway.
If I enter select all text, and the text is a number, and I press Enter-key, I get message 'A number must be entered'.
Also, IMO, showing a messagebox after each and every wrong input, forcing the user to press Enter or click OK will drive users nuts.
Just simply dismiss invalid input.
Use TextHint property of the TEdit to let the user kow he is supposed to enter a number in there.
Why do you try to re-invent the wheel?
If you want a control for iputting integers use TSpinEdit (or TSpinEditEx), or if your program is Windows only, use a TEdit and set NumbersOnly to True and let the OS handle it for you.
An alternative is TMaskEdit which will force the user to enter only digits and a leading + or minus if you set it up with the correct mask (something like '#99999').
It does not look very attractive, but it lets you control user-input in a very tight manner.
Bart