代码之家  ›  专栏  ›  技术社区  ›  Mason Wheeler

如何知道控件何时更改大小?

  •  3
  • Mason Wheeler  · 技术社区  · 14 年前

    我正在构建一个自定义控件,我需要它在调整大小时能够响应。我需要旧的尺寸和新的尺寸来做一些计算。

    不幸的是,setwidth和setheight方法对tcontrol是私有的,不受保护,所以我不能重写它们。有没有其他方法可以知道我的控件将要调整大小,并且旧大小和新大小都可用?

    2 回复  |  直到 14 年前
        1
  •  9
  •   Jon Benedicto    14 年前

    重写setbounds公共方法。它以新的大小传递,您可以使用宽度和高度属性来获取当前的宽度/高度。

    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
    
        2
  •  -1
  •   Toby Allen    14 年前

    另一种解决方案是使用tcontrol的onResize事件。这不一定在某些控件中发布,但如果不发布,您仍然可以在代码中附加处理程序。

    MyControl.OnResize := MyResizeEvent;
    

    虽然这只允许您获得新的大小,但是如果您将旧的大小保存在一组变量中,那么您可以做您希望做的事情。

    function Myform.MyResizeEvent(Sender: TObject) ;
    var
    
    begin
    
      DoSomethingOnResize(OldHeight, OldWidth, (Sender as TControl).Height,(Sender as TControl).Width);
      OldHeight := (Sender as TControl).Height;
      OldWidth := (Sender as TControl).Width;
    
    end;