Well, my example is obviously restricted to the capabilities of the VCL/LCL event handling system. I think you may have missed my point though: I wasn't saying you should only use built-in key handling methods, I was just saying you should use the actual keycodes that already exist instead of defining your own. For example, VK_A is defined as $41. If you go and define MYENGINEK_A as $58, you're just making the engine less compatible with everything for no reason.