2010-05-08 67 views
3

我正在構建一個自定義控件,並且需要它能夠在調整大小時作出響應。我需要舊的尺寸和可用的新尺寸才能進行一些計算。如何知道我的控件何時更改大小?

不幸的是,SetWidth和SetHeight方法對TControl是私有的,沒有保護,所以我不能覆蓋它們。有沒有其他方法可以知道我的控件即將被調整大小,並且可以使用舊的尺寸和新的尺寸?

回答

9

重寫SetBounds公共方法。它傳入新的尺寸,並且可以使用「寬度」和「高度」屬性獲取當前的寬度/高度。

procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; 
-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; 
+0

來吧。他正在構建一個自定義控件。它應該適用於任何父母,而不僅僅是Myform。 – 2010-05-08 13:28:09

+0

-1。在編寫控件時,您自己的控件的事件處理程序是禁止的。事件處理程序是針對控件的消費者,而不是作者。如果您想要處理該事件的等價物,則覆蓋觸發該事件的方法。在這種情況下,重寫'TControl.Resize'。 – 2010-05-08 15:09:47

+0

對不起,我錯過了他正在編寫自定義控件的那一點,我以爲他只是想獲得控件大小調整的詳細信息。 – 2010-05-08 19:07:24

相關問題