MainForm主程序里有这样的一个过程装载Frame //装载Frame procedure TMainForm.LoadFrame(str: string); begin if FFrame<>nil then//创建前先行释放Frame; FFrame是一个全局变量 begin FFrame.Free; FFrame := nil; end; if GetClass(str)<>nil then begin FFrame:=TFrameClass(Findclass(str)).Create(self);//用创建的Frame重写FFrame变量; FFrame.Parent:=GroupFrame; FFrame.Align :=alClient; FFrame.Show; end; end;//TreeView组件在不同的节点选择Frame procedure TMainForm.trvManageChange(Sender: TObject; Node: TTreeNode); begin //加载TMyFrame if 满足一些条件 then loadFrame('TMyFrame'); end;initialization//注册Frame; RegisterClass(TMyFrame);//End MainForm .比如说我想让TMyFrame在创建时将其中包括的ListBox1的Item填充. //TMyFrame ListBox组件 for i := 0 to 10 do ListBox1.items.add(IntToStr(i)); 当加载这个Frame时怎么让这条语句执行呢?
既然TMyFrame是你自己写的,那么你就可以在TMyFrame中重定义Create方法啊 TMyFrame = class(TFrame) public construtcor Create(AOwner: TComponent); override; end;constructor TMyFrame.Create(AOwner: TComponent); begin //do anything you want! end;
//装载Frame
procedure TMainForm.LoadFrame(str: string);
begin
if FFrame<>nil then//创建前先行释放Frame; FFrame是一个全局变量
begin
FFrame.Free;
FFrame := nil;
end; if GetClass(str)<>nil then
begin
FFrame:=TFrameClass(Findclass(str)).Create(self);//用创建的Frame重写FFrame变量;
FFrame.Parent:=GroupFrame;
FFrame.Align :=alClient;
FFrame.Show;
end;
end;//TreeView组件在不同的节点选择Frame
procedure TMainForm.trvManageChange(Sender: TObject; Node: TTreeNode);
begin
//加载TMyFrame
if 满足一些条件 then
loadFrame('TMyFrame');
end;initialization//注册Frame;
RegisterClass(TMyFrame);//End MainForm .比如说我想让TMyFrame在创建时将其中包括的ListBox1的Item填充.
//TMyFrame ListBox组件
for i := 0 to 10 do
ListBox1.items.add(IntToStr(i));
当加载这个Frame时怎么让这条语句执行呢?
TMyFrame = class(TFrame)
public
construtcor Create(AOwner: TComponent); override;
end;constructor TMyFrame.Create(AOwner: TComponent);
begin
//do anything you want!
end;
最好是重定义DoCreate方法protected
procedure DoCreate; override;
constructor TMyFrame.Create(AOwner: TComponent);
begin
inherited; //do anything you want!
end;
如
public
procedure MyCreate();在调用Frame.Show之前,先调用Frame.MyCreate完成初始化。