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

Delphi 如何知道控件何时更改大小?,delphi,custom-controls,Delphi,Custom Controls,我正在构建一个自定义控件,我需要它能够在调整大小时做出响应。我需要旧尺寸和新尺寸,以便进行一些计算 不幸的是,SetWidth和SetHeight方法是TControl的私有方法,不受保护,因此我无法覆盖它们。是否有其他方法可以知道我的控件即将调整大小,并使旧大小和新大小都可用?重写SetBounds public方法。它以新的大小传递,您可以使用“宽度”和“高度”属性获取当前的宽度/高度 procedure SetBounds(ALeft, ATop, AWidth, AHeight: Int

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


不幸的是,SetWidth和SetHeight方法是TControl的私有方法,不受保护,因此我无法覆盖它们。是否有其他方法可以知道我的控件即将调整大小,并使旧大小和新大小都可用?

重写SetBounds public方法。它以新的大小传递,您可以使用“宽度”和“高度”属性获取当前的宽度/高度

procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;

另一种解决方案是使用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;

拜托。他正在建立一个自定义控件。它应该适用于任何父母,而不仅仅是我的表格。编写控件时,您自己的控件的事件处理程序是禁止的。事件处理程序用于控件的使用者,而不是作者。如果您想要处理该事件的等效方法,请重写触发该事件的方法。在本例中,覆盖
t控件。调整大小
。很抱歉,我错过了他编写自定义控件的部分,我以为他只是想了解控件调整大小的详细信息。