首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向TLabel添加图形时出现问题

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

Stack Overflow用户
提问于 2008-09-25 15:31:18
回答 2查看 779关注 0票数 2

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

代码语言:javascript
复制
function TMyComponent.GetClientRect: TRect;
begin
  result := inherited GetClientRect;
  result.Left := 20;
end;

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-09-25 16:16:30

第一个借口--我的英语不好。

我认为更改组件的ClientRect不是一个好主意。此属性用于许多内部方法和过程,因此您可能会意外地更改该组件的功能/操作。

我认为您可以更改点以编写文本(在DoDrawText procedure -for example中为20像素),并且组件可以响应图形区域中的事件。

代码语言:javascript
复制
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;
票数 4
EN

Stack Overflow用户

发布于 2008-09-25 15:53:59

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

你会不会更好地继承(比方说,TImage)并将你的文本绘制为它的paint方法的一部分呢?

如果它真的必须是TLabel的后代(所有这些都需要),那么我认为你会被这个设计时的问题所困扰,因为当标题为空的时候,TLabel就不会有这个问题吗?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/134018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档