Hace tiempo hice algo parecido derivando el control y capturando los mensajes:
Código Delphi
[-]
procedure CMKeyDown(var Msg:TWMKey); message CN_KEYDOWN;
procedure CMChar(var Msg:TWMKey); message CN_CHAR;
Segun el tamaño del control, cuando se detectaba cambio que excedía de límites se cortaba el texto en exceso.
Ahora mismo no tengo el código a mano. Si lo encuentro intentaré ponerte algo más concreto.