代码之家  ›  专栏  ›  技术社区  ›  Harriv

向tlabel添加图形时出现问题

  •  2
  • Harriv  · 技术社区  · 17 年前

    我试图用delphi创建一个继承自tlabel的组件,并在tlabel.paint上添加一些自定义图形。我希望图形位于文本的左侧,因此我超越了getclientract:

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

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

    2 回复  |  直到 17 年前
        1
  •  4
  •   Germán Estévez -Neftalí-    17 年前

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

    我认为你可以改变点来写文本(20像素 DOWRAW文本 过程(例如)和组件可以对图形区域中的事件做出响应。

    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;
    
        2
  •  0
  •   robsoft    17 年前

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

    也许你最好做一个(比如提马)的后代,把你的文字作为它绘画方法的一部分?

    如果它真的必须是一个Tlabel的后代(包括所有这一切),那么我认为您将陷入这个设计时问题,就像在标题为空时Tlabel不存在这个问题一样?

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

    推荐文章