edgarrod71, I like your code. I tested it, and I found a problem, because I like to put some tEdit inside a tPanel and, in this case, the shapes were misplaced. I found a simple solution, changing the line 12 of your code:
aShape.Parent := TC.Parent; // Instead aShape.Parent := Self;