unit frmStartPage;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ImgList,Contnrs, ComCtrls, ExtCtrls;
Type
//填充pageControl的Frame基类
TPageFrame = class(TFrame)
protected
function Caption :String ; virtual; abstract;
end;
TPageFrameClass = class of TPageFrame ;
TStartPage = class(TForm)
PageControl1: TPageControl;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
StartPage :TStartPage ;
RegTabSheetClasses: TClassList;
procedure RegisterStartPageTabSheet( AFrameClass :TPageFrameClass);
implementation
{$R *.dfm}
procedure TStartPage.FormCreate(Sender: TObject);
var
i:integer;
lTabSheet : TTabSheet;
lFrame : TPageFrame;
begin
for i:= 0 to RegTabSheetClasses.Count -1 do
begin
lTabSheet := TTabSheet.Create(PageControl1);
lFrame := TPageFrameClass( RegTabSheetClasses[i]).Create(self) as TPageFrame;
lTabSheet.Caption := lFrame.Caption ;
lFrame.Align := alClient;
lTabSheet.InsertControl(lFrame);
lTabSheet.PageControl := PageControl1;
lTabSheet.PageIndex := 0 ;
end;
end;
procedure RegisterStartPageTabSheet( AFrameClass :TPageFrameClass);
begin
RegTabSheetClasses.Add(AFrameClass);
end;
initialization
RegTabSheetClasses := TClassList.Create ;
finalization
RegTabSheetClasses.Free;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,frmStartPage, StdCtrls;
type
TFrame2 = class(TPageFrame)
Label1: TLabel;
private
{ Private declarations }
protected
{ Public declarations }
function Caption :String ; override;
public
end;
implementation
{$R *.dfm}
{ TFrame2 }
function TFrame2.Caption: String;
begin
result := ‘Frame1‘;
end;
initialization
RegisterStartPageTabSheet(TFrame2);
end.
http://www.cnblogs.com/sonicit/archive/2008/04/08/1141831.html
Delphi下IOC 模式的实现(反转模式,即Callback模式)
原文:http://www.cnblogs.com/findumars/p/6329670.html