Delphi 向TLabel添加图形时出现问题
我正试图用Delphi创建一个从TLabel继承的组件,并在TLabel.Paint上添加一些自定义图形。我希望图形位于文本的左侧,因此我重写了GetClientRect: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; 这个解决方案有一个我想解决的主要问题:不可能单击控件的“图形区域”,只能单击标签区域。如果标题为空
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建议的评论)-很高兴现在有了解决方案!