MyLabel 的 TCustomLabel 标题没有改变
MyLabel's Caption of TCustomLabel is not changing
我创建了一个继承自 TCustomLabel
的组件 TMyLabel
。
如果布尔值 属性 SetPeriodAtEnd
设置为 True,我想在 Caption
末尾添加句点,如果设置为 False,我想删除句点。
我已经声明了布尔值 属性:
property SetPeriodAtEnd: Boolean read fPeriodAtEnd write SetPeriodAtEnd;
procedure TMyLabel.SetPeriodAtEnd(Value: Boolean);
begin
fPeriodAtEnd := Value;
if fPeriodAtEnd then
Caption := Caption + '.......';
end;
这在 SetPeriodAtEnd()
仅更改一次时有效。后来 ......
即使是 False 值也会被添加。
此外,我的动机是仅在 Caption
中添加句点 ......
以供查看,而不是作为价值。例如,Caption := hello....
用于查看和存储 Caption
为 hello
,没有句号。这可能吗?
仅 cDots 可以 select 不同的字体样式和颜色吗?
对于您尝试执行的操作,您可以重写虚拟 GetLabelText()
方法:
Returns the value of the Caption
property.
Call GetLabelText to obtain the string that appears as the text of the label.
在内部,TCustomLabel
在绘制其 Caption
时使用 GetTextLabel()
,并且在 Caption
更改且 AutoSize
为真时调整自身大小时。因此,您可以覆盖 GetLabelText()
以提供与 Caption
设置不同的字符串,例如:
type
TMyLabel = class(TCustomLabel)
private
fPeriodAtEnd: Boolean;
procedure SetPeriodAtEnd(Value: Boolean);
protected
function GetLabelText: string; override;
published
property SetPeriodAtEnd: Boolean read fPeriodAtEnd write SetPeriodAtEnd;
end;
...
uses
System.StrUtils;
function TMyLabel.GetLabelText: string;
const
cDots = '.......';
begin
Result := inherited GetLabelText;
if fPeriodAtEnd then
begin
if not EndsText(cDots, Result) then
Result := Result + cDots;
end
else begin
if EndsText(cDots, Result) then
Result := LeftStr(Result, Length(Result)-Length(cDots));
end;
end;
procedure TMyLabel.SetPeriodAtEnd(Value: Boolean);
begin
if fPeriodAtEnd <> Value then
begin
fPeriodAtEnd := Value;
Perform(CM_TEXTCHANGED, 0, 0); // triggers Invalidate() and AdjustBounds()
end;
end;
我创建了一个继承自 TCustomLabel
的组件 TMyLabel
。
如果布尔值 属性 SetPeriodAtEnd
设置为 True,我想在 Caption
末尾添加句点,如果设置为 False,我想删除句点。
我已经声明了布尔值 属性:
property SetPeriodAtEnd: Boolean read fPeriodAtEnd write SetPeriodAtEnd;
procedure TMyLabel.SetPeriodAtEnd(Value: Boolean);
begin
fPeriodAtEnd := Value;
if fPeriodAtEnd then
Caption := Caption + '.......';
end;
这在 SetPeriodAtEnd()
仅更改一次时有效。后来 ......
即使是 False 值也会被添加。
此外,我的动机是仅在 Caption
中添加句点 ......
以供查看,而不是作为价值。例如,Caption := hello....
用于查看和存储 Caption
为 hello
,没有句号。这可能吗?
仅 cDots 可以 select 不同的字体样式和颜色吗?
对于您尝试执行的操作,您可以重写虚拟 GetLabelText()
方法:
Returns the value of the
Caption
property.Call GetLabelText to obtain the string that appears as the text of the label.
在内部,TCustomLabel
在绘制其 Caption
时使用 GetTextLabel()
,并且在 Caption
更改且 AutoSize
为真时调整自身大小时。因此,您可以覆盖 GetLabelText()
以提供与 Caption
设置不同的字符串,例如:
type
TMyLabel = class(TCustomLabel)
private
fPeriodAtEnd: Boolean;
procedure SetPeriodAtEnd(Value: Boolean);
protected
function GetLabelText: string; override;
published
property SetPeriodAtEnd: Boolean read fPeriodAtEnd write SetPeriodAtEnd;
end;
...
uses
System.StrUtils;
function TMyLabel.GetLabelText: string;
const
cDots = '.......';
begin
Result := inherited GetLabelText;
if fPeriodAtEnd then
begin
if not EndsText(cDots, Result) then
Result := Result + cDots;
end
else begin
if EndsText(cDots, Result) then
Result := LeftStr(Result, Length(Result)-Length(cDots));
end;
end;
procedure TMyLabel.SetPeriodAtEnd(Value: Boolean);
begin
if fPeriodAtEnd <> Value then
begin
fPeriodAtEnd := Value;
Perform(CM_TEXTCHANGED, 0, 0); // triggers Invalidate() and AdjustBounds()
end;
end;