如何知道我的控件何时改变大小?

时间:2010-05-08 03:39:22

标签: delphi custom-controls

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

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

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:-1)

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

MyControl.OnResize := MyResizeEvent;

虽然这只会让你获得新的大小,但是如果你把oldsize保存在一组变量中,那么你就可以做你想做的事。

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;