【问题标题】:Problem with adding graphics to TLabel将图形添加到 TLabel 的问题
【发布时间】:2010-09-13 03:18:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: delphi getclientrect tlabel


    【解决方案1】:

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

    您是否会更好地创建(例如,TImage)的后代并将您的文本作为其绘制方法的一部分进行绘制?

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

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

    【讨论】:

    • 基本上我只是在想“我需要带有图形的标签”,并且由于文本绘图已经存在,因此仅添加图形部分是我解决此问题的第一个赌注。
    • 这是有道理的。 (查看您对@neftali 建议的评论)- 很高兴现在有解决方案!
    【解决方案2】:

    请原谅我的英语不好。
    我认为更改组件的 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2023-04-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      相关资源
      最近更新 更多