You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi Firemonkey:如何向自定义TRectangle组件添加文本?

在FireMonkey自定义TRectangle组件中添加文本的两种方案

嘿,刚上手FireMonkey的话,给继承自TRectangle的自定义组件加文本其实没那么复杂,我给你分享两种实用的思路:

方案一:直接嵌入TText子控件(最省心的方式)

这种方法不用自己写绘制逻辑,直接利用FireMonkey的控件嵌套特性,在自定义组件里内置一个TText控件:

  • 首先在组件类里声明一个TText成员变量,然后在构造函数中初始化它:
type
  TMyCustomRectangle = class(TRectangle)
  private
    FText: TText;
    function GetText: string;
    procedure SetText(const Value: string);
  public
    constructor Create(AOwner: TComponent); override;
  published
    property Text: string read GetText write SetText; // 暴露成设计期可编辑的属性
  end;

constructor TMyCustomRectangle.Create(AOwner: TComponent);
begin
  inherited;
  FText := TText.Create(Self);
  FText.Parent := Self;
  FText.Align := TAlignLayout.Client; // 让文本填充整个矩形区域
  FText.TextAlign := TTextAlign.Center; // 水平居中
  FText.VertTextAlign := TVertTextAlign.Center; // 垂直居中
  FText.Font.Size := 14;
  FText.WordWrap := True; // 支持多行文本
end;

function TMyCustomRectangle.GetText: string;
begin
  Result := FText.Text;
end;

procedure TMyCustomRectangle.SetText(const Value: string);
begin
  FText.Text := Value;
end;
  • 这样做的好处是,你可以在设计期直接通过Object Inspector修改Text属性,还能利用TText自带的所有样式设置(字体、颜色、换行等),完全不用操心绘制细节。

方案二:重写Paint方法手动绘制文本(更灵活的控制)

如果需要对文本的绘制逻辑做定制(比如根据组件状态改变文本颜色、自定义文本位置),可以重写TRectangle的Paint方法,在绘制完矩形后手动渲染文本:

  • 先在组件类里声明文本变量和对应的属性:
type
  TMyCustomRectangle = class(TRectangle)
  private
    FCustomText: string;
    procedure SetCustomText(const Value: string);
  protected
    procedure Paint; override;
  published
    property CustomText: string read FCustomText write SetCustomText;
  end;

procedure TMyCustomRectangle.SetCustomText(const Value: string);
begin
  if FCustomText <> Value then
  begin
    FCustomText := Value;
    Repaint; // 修改文本后触发组件重绘
  end;
end;
  • 然后重写Paint方法,完成文本绘制:
procedure TMyCustomRectangle.Paint;
var
  LTextBounds: TRectF;
begin
  inherited; // 先调用父类方法绘制矩形本身
  // 计算文本的绘制范围,这里示例是居中显示
  LTextBounds := RectF(0, 0, Width, Height);
  // 设置文本样式
  Canvas.Font.Size := 16;
  Canvas.Fill.Color := TAlphaColors.White;
  // 绘制文本,最后两个参数控制对齐方式
  Canvas.FillText(LTextBounds, FCustomText, False, 1, [], TTextAlign.Center, TVertTextAlign.Center);
end;
  • 这种方式适合需要高度定制的场景,比如你想让文本在组件被选中时变色,或者根据组件的尺寸动态调整字体大小,都可以在Paint方法里实现。

小提示

  • 如果用方案一看不到文本,先检查TText的Color属性是不是和矩形的Fill.Color冲突了(比如都是黑色),调整一下就能看到。
  • 不管用哪种方案,记得把相关属性声明在published段里,这样才能在设计期的Object Inspector中看到并编辑。

内容的提问来源于stack exchange,提问作者Alexander James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:09:16