一.主要代碼
a)主窗體
type TFrameClass = class of TFrame; TFrmMain = class(TForm) Button1: TButton; Panel1: TPanel; Button2: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } FCurrentfrmClassName: string; FCurrentfrm: TFrame; procedure LoadFrameByClassName(theFrameClass: TFrameClass); public { Public declarations } end; var FrmMain: TFrmMain; implementation {$R *.dfm} procedure TFrmMain.FormCreate(Sender: TObject); begin FCurrentfrmClassName:=''; FCurrentfrm:=nil; end; procedure TFrmMain.LoadFrameByClassName(theFrameClass: TFrameClass); begin if Assigned(FCurrentfrm)and( not SameText(theFrameClass.ClassName,FCurrentfrmClassName)) then FreeAndNil(FCurrentfrm); FCurrentfrm:=theFrameClass.Create(nil); FCurrentfrm.Parent:=Panel1; FCurrentfrm.Left:=(Panel1.Width-FCurrentfrm.Width)div 2; FCurrentfrm.Top:=(Panel1.Height-FCurrentfrm.Height)div 2; FCurrentfrmClassName:=theFrameClass.ClassName; end; procedure TFrmMain.Button1Click(Sender: TObject); begin Self.LoadFrameByClassName(TFrmFirstFrame); ShowMessage('顯示第一個Frame!'); end; procedure TFrmMain.Button2Click(Sender: TObject); begin Self.LoadFrameByClassName(TFrmSecondFrame); ShowMessage('顯示第二個Frame!'); end; end.
b)第一個Frame
type TFrmFirstFrame = class(TFrame) private { Private declarations } public { Public declarations } end; implementation {$R *.dfm} end.
c)第二個Frame
type TFrmSecondFrame = class(TFrame) private { Private declarations } public { Public declarations } end; implementation {$R *.dfm} end.
二.測試
顯示第一個Frame
顯示第二個Frame