Не думаю, что вы хотите получать уведомление о том, что размер потомка TLabel
был изменен. Вместо этого вы хотите получить уведомление о сокращении текста .Я знаю, что они кажутся одинаковыми, но это не так - метка может быть все же шире, чем текст, может быть включена WordWrap
и т. Д. Кроме того, потомки TCustomLabel
могут использовать несколько разных методов длятекст, основанный на тематике / Vista / Aero, светящиеся вещи (они сводятся к DrawThemeTextEx
и DrawText
), поэтому вам нужно подключиться к этой системе, чтобы точно знать, чтотекст, который рисует, включая размер отображаемого текста.
Если вы используете не начальную версию Delphi, взгляните на источник TCustomLabel
в stdctrls.pas
.Есть два метода, представляющих интерес:
TCustomLabel.AdjustBounds
- это где ограничивающий прямоугольник, и он настраивается для переноса слов и т. Д. Это делается путем вызова (как рисование) другого методаинтерес: TCustomLabel.DoDrawText
- это рисует текст и / или вычисляет текст ограничивающего прямоугольника с учетом эллипсов, обтеканий и тому подобное. Внутренне, он генерирует измененную строку, которая является текстом, который фактически нарисован. Другими словами, функциональность этого метода - это то, что говорит вам, подходит ли текст или нет.
Обаdynamic
, что семантически эквивалентно virtual
- то есть вы можете переопределить их.
DoDrawText
к сожалению, не возвращает окончательную текстовую строку, которую рисует - если это так, вы могли бы переопределитьэто, вызовите унаследованную версию и сравните нарисованный текст с реальным текстом.Тем не менее, вы можете переопределить и переопределить его, и сделать это самостоятельно.Используйте код VCL в качестве руководства (вам нужна эквивалентная функциональность, хотя вы не должны копировать его напрямую, поскольку он принадлежит Embarcadero.) Будучи dynamic
, версия вашего потомка будет вызываться AdjustBounds
.В своем коде, когда вы укорачиваете текст, также устанавливаете флаг, он был укорочен, или немедленно генерируйте подсказку.Вуаля.Вы точно знаете точно, когда оно было сокращено:)