我正在构建一个自定义控件,我需要它才能在调整大小时做出响应。我需要旧尺寸和新尺寸才能进行一些计算。
不幸的是,SetWidth和SetHeight方法对TControl是私有的,没有受到保护,因此我无法覆盖它们。有没有其他方法可以知道我的控件将要调整大小,并且旧尺寸和新尺寸都可用?
答案 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;