【发布时间】:2011-03-10 14:27:24
【问题描述】:
我正在尝试创建 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属性。看不出任何一个比消息处理程序更好的理由......
标签: delphi winapi resize notifications tlabel