向TLabel添加图形的问题

时间:2008-09-25 15:31:18

标签: delphi getclientrect tlabel

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

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

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

2 个答案:

答案 0 :(得分:4)

首先请原谅我的英语不好 我认为这不是一个好主意更改组件的ClientRect。此属性/信息用于组件的许多方法和过程内部,您可以更改组件的functionemnt / operation。

我认为您可以更改写入文本的点( 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;

答案 1 :(得分:0)

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

你或许可以更好地制作一个(例如,TImage)的后代并将你的文本作为它的绘画方法的一部分来绘制吗?

如果它确实是一个TLabel后代(所有这一切都需要),那么我认为你将会遇到这个设计时问题,因为当标题为空时,TLabel是否还有这个问题呢? / p>

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