Я пытаюсь создать потомка TLabel, который будет отображать подсказку со всей подписью, когда ширина текста превышает ширину метки. Я установил для свойства EllipsisPosition значение epEndEllipsis, и моя подпись автоматически закорочена многоточием в конце. Хорошо.
Однако я должен быть уведомлен, что текст был сокращен, чтобы настроить подсказку. В моем случае это может произойти только при изменении текста (сообщение CM_TEXTCHANGED) и при изменении размера компонента.
И это мой вопрос - как я могу получить уведомление о том, что размер TLabel был изменен? У меня там есть якоря, поэтому его размер изменяется вместе с формой, но я хотел бы обернуть его в отдельный TLabel потомок.
Этот код работает, но нет ли лучшего способа? Что-то вроде WM_EXITSIZEMOVE, но работаете с TGraphicControl?
procedure TEllipsisLabel.WMWindowPosChanged(var Message: TWMWindowPosChanged);
begin
inherited;
if Assigned(Parent) then
if Canvas.TextWidth(Caption) > Width then
begin
ShowHint := True;
Hint := Caption;
end
else
begin
ShowHint := False;
Hint := '';
end;
end;
Большое спасибо :)
SetBounds
, где выполняетсяWM_WINDOWPOSCHANGED
. Или, если вы хотите поместить код в обработчик событий, вы можете просто опубликовать свойствоOnResize
своего потомка. Не вижу причин, по которым любой из них был бы лучше, чем обработчик сообщений ... - person Sertac Akyuz   schedule 10.03.2011