光看幫助你大概搞不清楚這個有什麼用。我舉一個例子,一般mainform都有很多選單按鈕,用來開啟不同的視窗,通常做法要在uses部分新增所有要引用的單元,十分麻煩,用上面的技術就可以避免引用。假設所有的業務視窗都從TAppBasicForm繼承,你可以宣告這樣的型別:
TTAppBasicFormClass = class of TTAppBasicForm;
然後在每個業務視窗程式碼結尾處加上:
initialization
RegisterClass(TBusMemberNewForm); //TBusMemberNewForm從TAppBasicForm繼承
finalization
UnRegisterClass(TBusMemberNewForm);
最後在Mainform用下面的函式: procedure TTMainForm.ShowForm(sFormClass: string); var AppFormClass: TTAppBasicFormClass; begin try AppFormClass := TTAppBasicFormClass(FindClass(sFormClass)); with AppFormClass.Create(self) do begin Show; end; except ShowMessage('Class ‘+sFormClass+' not exist or not register!'); end; end; 這個函式的引數就是要開啟的視窗類名 更進一步,因為專案中Menu的hint屬性不會用到,可以用來儲存要開啟的類名,如下: procedure TTMainForm.MainFormMenuClick(Sender: TObject); var sFormName: string; begin with sender as TMenuItem do begin sFormName := Trim(Hint); if sFormName<>'' then ShowForm(sFormName); end; end; procedure TTMainFaceForm.SetMenuAction; var i: integer; begin for i:=0 to ComponentCount-1 do begin if Components[i] is TMenuItem then begin with Components[i] as TMenuItem do if Trim(Hint)<>'' then OnClick := MainFormMenuClick; end; end; end; 這樣的話每增加一個選單,只要指定選單的hint屬性就自動實現開啟對應業務的功能,避免引用單元,也不用寫選單的onclick程式碼,非常簡潔。當然這個還用到了RegisterClass和FindClass的技術,去看幫助就明白了。