向TLabel添加图形的问题

时间:2020-03-06 14:43:40  来源:igfitidea点击:

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

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

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

解决方案

我们需要从TLabel获得哪些方法/功能来执行此组件?

我们可能会更好地制作(例如TImage)的后代并将文本绘制为Paint方法的一部分?

如果确实是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;