摘 要:不需要修改源代碼或在部件面板中注冊派生部件就能為部 關鍵字:delphi delphi3000 方法 派生 繼承&n 類 別:Object Pascal
有沒有辦法不需要修改源代碼或安裝派生部件就能增加新的方法和屬性?
增加新的方法和屬性 --------------------------------- 有時我們要為已有的部件增加新的方法和屬性(或改變已有屬性的可視性)。一個方法是修改部件,但這意味著對它的package重新編譯,而且如果要其它人也編譯我們的應用程序,就要把我們的變動重新發布,這樣對方就很麻煩。有時我們不能這樣做,因為我們可能沒有源代碼。這樣的話。最好對部件進行派生,并加入新的屬性和方法。例如: type TEditX = class(TEdit) public function GetForeColor: TColor; procedure SetForeColor(color: TColor); property ForeColor: TColor read GetForeColor write SetForeColor; end;
這些方法可以按下例的方法實現。 function TEditX.GetForeColor: TColor; begin Result := Font.Color; end;
procedure TEditX.SetForeColor(color: TColor); begin Font.Color := Color; end;
強制轉換成新類 ------------------------
我們無需安裝新部件或把它注冊到部件面板中或在應用程序中取代已有的控件(這樣會得不償失)。相反任何時候只要我們需要訪問新屬性和方法,我們可以把對象強制轉換(如Edit1)成我們的新類,例如: TEditX(Edit1).ForeColor := clRed;
或
TEditX(Edit1).SetForeColor(clRed);
警告:只有在新類中加入新的屬性和靜態方法時才能把它強制轉換成派生類,但不能增加新的字域和新的虛方法或動態方法,雖然理論上你可以重載已有的虛方法。此外,已有屬性的可見性可以改變,就象"訪問隱藏屬性"文中講解的InplaceEditor例子。
|