一Owner和Parent的區別
Parent屬性是指構件的包容器構件只能在此范圍內顯示和移動舉例子如下
()在Form的窗體上放一個Panel並將Panel拉大
()在Panel上放一Button
()在Form上放一Button
現在如果移動Panel則Button隨著Panel移動這是因為Button的Parent是Panel現在將Button移到Panel上再次移動PanelButton並不跟著移動這是因為Button的Parent是Form除在窗體設計中應注意構件的Parent是誰外在動態創建構件時也應指出構件的Parent如在上例中繼續操作
)Procedure TformButtonclick(Sender:Tobjet);
)Var
) Button:Tbutton;
) Begin
) Button:Tbuttoncerate(self);
) Buttonparent=panel;
) Buttonlleft=;
) Buttontop=;
) Buttoncaption:=;OK;;
) End
當按Button時將在Panel上創建一個Button而如果把第句改為Buttonparent:=self按Button時將在Form上創建一個Button了如果將第句刪除按Button時什麼都不會發生這是因為創建方法無法知道應在哪裡顯示構件
Owner屬性是指構件的所有者它負責構件的創建和釋放如在上例中系統默認窗體上所有構件的所有者是窗體而窗體的所有者是Application順便指出create方法應帶有表示構件所有者的參數如在上例中構件所有者是窗體即self
Parent屬性和Owner屬性是運行階段的屬性只能在運行階段通過代碼設置
二Self和Sender的區別
在事件處理程序參數表中至少含有一個參數Sender它代表觸發事件處理程序的構件如在上例中Sender就指Button有了Sender參數可以使多個構件共用相同的事件處理程序如下例
Procedure TformButtonclick(Sender:Tobject);
Begin
If sender=button then
Labelcaption:=;看庭前花開花落 ;
Else Labelcaption:=;望天上雲卷雲舒;
End
在此例中ButtonButton共用了Buttonclick事件處理程序
Self是指所編的程序范圍是在哪一個類中Delphi中大都在窗體范圍內編程因此self即指窗體如果在編寫一個類或是一個組件則self指該類或組件我們在函數或過程的聲明中可看出self是代表哪個組件即self代表號之前的組件如在第一個例子中self代表Tform另外應注意self只能用在類方法中而不能用在過程或函數中如下例用法是錯的:
Function a(B:Integer):Integer;
Begin
……
Button:=tbuttoncreate(self)……
End
三Clientheight和HeightClientwidth和Width的區別
對於一般的構件而言Height就是ClientheightWidth就是Clientwidth而對於窗體而言Height是包括標題條在內的高度而Clientheight是指窗體工作區的高度同理Clientwidth是指定窗體工作區的寬度
從上面陳述可知理解Ower和ParentSelf和SenderClientheight和HeightClientwidth和Width區別對於Delphi中正確編程是重要的
From:http://tw.wingwit.com/Article/program/Delphi/201401/30269.html