Delphi 向TLabel添加图形时出现问题

Delphi 向TLabel添加图形时出现问题,delphi,getclientrect,tlabel,Delphi,Getclientrect,Tlabel,我正试图用Delphi创建一个从TLabel继承的组件,并在TLabel.Paint上添加一些自定义图形。我希望图形位于文本的左侧,因此我重写了GetClientRect: function TMyComponent.GetClientRect: TRect; begin result := inherited GetClientRect; result.Left := 20; end; 这个解决方案有一个我想解决的主要问题:不可能单击控件的“图形区域”,只能单击标签区域。如果标题为空

我正试图用Delphi创建一个从TLabel继承的组件,并在TLabel.Paint上添加一些自定义图形。我希望图形位于文本的左侧,因此我重写了GetClientRect:

function TMyComponent.GetClientRect: TRect;
begin
  result := inherited GetClientRect;
  result.Left := 20;
end;

这个解决方案有一个我想解决的主要问题:不可能单击控件的“图形区域”,只能单击标签区域。如果标题为空字符串,则根本无法通过单击来选择设计器中的组件。有什么想法吗?

您从TLabel获得了哪些方法/功能需要此组件来完成

你是否会更好地制作(比如,TImage)的后代,并将文本作为其绘画方法的一部分来绘制

如果它真的必须是一个TLabel后代(包括所有这些),那么我认为您将陷入这个设计时问题,因为当标题为空时,TLabel不会有这个问题吗


我会对你得到的其他答案感兴趣!:-)

首先请原谅我的英语不好。
我认为改变组件的ClientRect不是一个好主意。此属性用于许多内部方法和过程,因此您可以意外更改该组件的功能/操作

我认为您可以更改写入文本的点(例如,DoDrawText过程中的20个像素),组件可以响应图形区域中的事件

procedure TGrlabel.DoDrawText(var Rect: TRect; Flags: Integer);
begin
  Rect.Left := 20;
  inherited;
end;

procedure TGrlabel.Paint;
begin
  inherited;

  Canvas.Brush.Color := clRed;
  Canvas.Pen.Color := clRed;
  Canvas.pen.Width := 3;
  Canvas.MoveTo(5,5);
  Canvas.LineTo(15,8);

end;

基本上,我只是在想“我需要带图形的标签”,因为文本绘图已经存在,所以我第一次打赌只添加图形部分。这是有道理的。(参见您对@neftali建议的评论)-很高兴现在有了解决方案!