In the old days I had an application made in D1, later D3 that relied heavily on TMaskEdit to enforce correct user input (floats).
It was in fact fool proof.
Then I made the switch to Lazarus and started to re-implement my Delphi apps in Lazarus (no proper conversion tool then).
TMaskEdit was non-functional to say it politely.
A simple Text := 'Something' could raise an exception.
So I sat out and started to almost re-implement it.
Just by black-boxing the behaviour against D3.
I made some subtle deviations from Delphi (e.g. OnExit fires before validation, so you can validate yourself).
Later on I added some nice features which Delphi does not have, like a mask for hexadecimal input, the possibility to temporarily disable the mask (and later re-enable it).
After I had done all that, I started out re-implementing my Delphi app, only to find out we (Lazarus) have a TFloatSpinEdit, which Delphi (3) does not.
So, I abandoned TMaskEdit and have not found a use for it since.
Bart