动态创建框架Frame的初始化问题?

colthero 2003-10-09 10:20:17
请问:

我的程序是通过TreeView组件不同节点动态创建Frame ....

在创建Frame时需要用到很多初始化处理,想问一下Frame有没

有像Create类似的事件可以在创建后处理一些事情。

别的办法的也行!
...全文
401 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dickeybird888 2003-10-13
  • 打赏
  • 举报
回复
ha ha !
litangel 2003-10-13
  • 打赏
  • 举报
回复
我是这样做的。

在Frame的单元里,加一个Public的方法。

public
procedure MyCreate();

在调用Frame.Show之前,先调用Frame.MyCreate完成初始化。
martinloyee 2003-10-13
  • 打赏
  • 举报
回复
楼上说的没错,frame是没有create事件的。我添加一行 inherited,免的你再有麻烦。
constructor TMyFrame.Create(AOwner: TComponent);
begin
inherited;

//do anything you want!
end;
ColdWolf 2003-10-13
  • 打赏
  • 举报
回复
不过在Create方法中对控件操作好像会有问题,因为这个时候这些控件还没有被实例化
最好是重定义DoCreate方法

protected
procedure DoCreate; override;
ColdWolf 2003-10-13
  • 打赏
  • 举报
回复
既然TMyFrame是你自己写的,那么你就可以在TMyFrame中重定义Create方法啊
TMyFrame = class(TFrame)
public
construtcor Create(AOwner: TComponent); override;
end;

constructor TMyFrame.Create(AOwner: TComponent);
begin
//do anything you want!
end;
colthero 2003-10-09
  • 打赏
  • 举报
回复
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时怎么让这条语句执行呢?
ColdWolf 2003-10-09
  • 打赏
  • 举报
回复
能不能将你的创建过程说的再详细一点
这样才知道你的具体问题啊!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧