Delphi 将标签作为子项添加到自定义组件

Delphi 将标签作为子项添加到自定义组件,delphi,delphi-xe2,Delphi,Delphi Xe2,我有一个自定义组件TCard=class(TGraphicControl)我希望当它被创建时,它会在它的区域ex(顶部:=5)(左侧:=5)内有一个标签,并且它在创建时总是在该TCard上放置一个TLabel type TCard = class(TGraphicControl) private FLPower:TLabel; procedure SetLPower(value:TLabel); protected procedure Pa

我有一个自定义组件
TCard=class(TGraphicControl)
我希望当它被创建时,它会在它的区域ex(顶部:=5)(左侧:=5)内有一个标签,并且它在创建时总是在该
TCard
上放置一个
TLabel

 type
   TCard = class(TGraphicControl)
   private
      FLPower:TLabel;
      procedure SetLPower(value:TLabel);
   protected
      procedure Paint; override;
   public
    property LPower: TLabel read FLpower write SetLPower;


...

 constructor Tcard.Create(AOwner: Tcomponent);
 begin
   inherited Create(AOwner);
   FLPower := TLabel.Create(self);
end

  procedure TCard.SetLPower(value: TLabel);
  begin
    FLPower.Assign(value);
  end;

  procedure Tcard.Paint;
  begin
      FLPower.Left := 5;
      FLPower.Top := 5;
  end;
我知道我做的不对,但我想展示一些东西。另外,如果有帮助的话,我计划将来能够做TCard.LPower.Caption:=inttostr(somenumber);所以如果你能在bonuse工作的话。。如果不是的话,我以后会想出来的。但是我想给你一个机会,以防你的建议因为这个原因不起作用。 谢谢
glen

TGraphic控件不能用作父控件,因此不能采用此方法

标签本质上是非常简单的东西。只是文字。您已经选择使用TGraphicControl,这意味着您将要实现一个绘制方法

因此,不要创建label控件,而是向控件中添加string类型的文本属性。然后,在绘制方法中,将文本绘制到绘制画布。修改Text属性时,使控件无效,以便可以重新绘制


无论如何,这样做是正确的。仅仅为了绘制文本而添加额外的控件是过分的。您选择了最轻的重量控制,这很好。绘制卡的背景,然后绘制所需的任何文本。工作完成。

'setLPower(值:Tlabel);`我更确信它是错的,我认为它可能是
(value:string)
或其他什么东西,这样我就可以将数据传递到标题中。但它给了我很多错误。不想以错误为焦点朝错误的方向前进。因此,这个问题是:你的目标是什么。使用组件创建的标签或链接外部标签。由于您使用的是TGCORICCOMPLE(它不能是标签的父级)(可能需要),您可能会考虑使用TWICONTROL一样的TCuffEntor,创建您的标签(设置父组件到您的组件),并添加属性来更改标签的标题,或者在
Paint
中直接在TGraphic控件上绘制标题。链接SetLPower中显示的外部标签(无需创建)将是完全不同的事情,我不建议这样做。tgraphic控件不能用作TLabel(或其他控件)的容器。您需要通过
Paint
绘制标题/文本。查看
TCustomLabel
源代码以了解它是如何完成的。@bummi是的,我希望组件创建自己的。因为我希望每个tcard(其中许多)都有自己的标签。所以我想画标题是次好的选择。它能画文本吗?如果演示如何?嗯,好的,不起作用。。我会继续写的..关闭这个问题,因为它所要求的无法完成..可能会打开另一个:/谢谢,要注意的是,在绘制任何背景后,您必须绘制文本