Delphi MyLabel';TCustomLabel的标题未更改

Delphi MyLabel';TCustomLabel的标题未更改,delphi,properties,caption,delphi-10.2-tokyo,Delphi,Properties,Caption,Delphi 10.2 Tokyo,我创建了一个组件TMyLabel,它继承自TCustomLabel 如果布尔属性SetPeriodAtEnd设置为True,我想在标题的末尾添加句点,如果设置为False,则删除句点 我已声明布尔属性: property SetPeriodAtEnd: Boolean read fPeriodAtEnd write SetPeriodAtEnd; 当SetPeriodAtEnd()仅更改一次时,此选项有效。以后,即使是对于假值,也会添加… 另外,我的动机是只在标题中添加句点,而不是作为值。例如

我创建了一个组件
TMyLabel
,它继承自
TCustomLabel

如果布尔属性
SetPeriodAtEnd
设置为True,我想在
标题的末尾添加句点,如果设置为False,则删除句点

我已声明布尔属性:

property SetPeriodAtEnd: Boolean read fPeriodAtEnd write SetPeriodAtEnd;
SetPeriodAtEnd()
仅更改一次时,此选项有效。以后,即使是对于假值,也会添加

另外,我的动机是只在标题中添加句点,而不是作为值。例如,
Caption:=hello….
用于查看
Caption
并将其存储为
hello
而不带句点。这可能吗


只能为CDOT选择不同的字体样式和颜色吗?

对于要执行的操作,您可以覆盖虚拟方法:

返回
标题
属性的值

调用GetLabelText以获取显示为标签文本的字符串

在内部,
TCustomLabel
在绘制其
Caption
时使用
gettextlab()
,以及在
Caption
更改且
自动调整大小时使用
。因此,您可以覆盖
GetLabelText()
以提供与
标题设置不同的字符串,例如:

类型
TMyLabel=class(TCustomLabel)
私有的
fPeriodAtEnd:布尔值;
过程设置周期结束(值:布尔);
受保护的
函数GetLabelText:string;推翻
出版
属性SetPeriodAtEnd:布尔读取FperiodEnd写入SetPeriodAtEnd;
结束;
...
使用
系统结构;
函数TMyLabel.GetLabelText:string;
常数
cDots=“……”;
开始
结果:=继承的GetLabelText;
如果fPeriodEnd那么
开始
如果不是EndsText(cDots,结果),则
结果:=结果+cDots;
结束
否则开始
如果是EndsText(cDots,Result),则
结果:=LeftStr(结果,长度(结果)-长度(cDots));
结束;
结束;
过程TMyLabel.SetPeriodAtEnd(值:布尔值);
开始
如果fPeriodEnd值为
开始
fPeriodAtEnd:=值;
执行(CM_TEXTCHANGED,0,0);//触发器Invalidate()和AdjustBounds()
结束;
结束;

问题是什么?你能发布你的代码吗?如果没有代码,你很难理解你在做什么,因此它为什么不工作
Caption:=Caption
没有效果。非常感谢@Remy。我要试试这个。这个有效。。非常感谢。我们可以更改圆点的font.style吗?我可以仅为CDOT选择不同的字体样式和颜色吗?为此,您必须覆盖标签的
Paint()
方法并手动绘制标题文本。然后,您可以根据需要拆分文本,并使用不同的字体设置绘制子字符串
procedure TMyLabel.SetPeriodAtEnd(Value: Boolean);
begin
  fPeriodAtEnd := Value;
  if fPeriodAtEnd then
    Caption := Caption + '.......';
end;