高难度的常见问题:如何访问TFRAME中的数据,200分!

lonaerd 2005-01-09 10:25:13
我的主程序可以动态调用若干个Tframe窗口,这我想是DELPHI的特色。
现在问题是:当我动态调用后,却不能外部访问TFRAME里面的东西,所有的事件全部要在TFRAME本身完成,这样就很头疼。例如我的TFRAME里有个TREEVIEW,我想弹出个窗口动态增加TREVIEW节点,但是连TREEVIEW都访问不了。

原因我知道,因为我的TFRAME是动态产生的,如果是静态的话应该没有问题。

以上现象各位有没有遇到过?如果有解决方法,更高的分送上
...全文
185 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Delphi1985 2005-01-10
  • 打赏
  • 举报
回复
用动态连接库怎么样?
myling 2005-01-10
  • 打赏
  • 举报
回复
frame1:tframe;
你这样定义的只是一个Tframe的对象阿
创建完了后上面什么都没有

如果treeview,litview在Tframe1
你的对象应该这么定义frame1:tframe1;阿


Frame其实就是一种基类窗体的实现方法
好好看看生成的代码吧
他们之间的关系就清楚了
ssq237712 2005-01-10
  • 打赏
  • 举报
回复
动态创建很多窗口,你是想做类似MDI文本编辑器的东西?
SYNEDIT的例子中有一个和这个类似,体系搭得比较不错。有空可以去看看
myling 2005-01-10
  • 打赏
  • 举报
回复
可是我又想只定义一个frame1对象,便于所有的不同FRAME用一个对象来生成和释放;如果不同的FRAME指定不同的申明对象,那样的话释放好麻烦啊!
我想能否通过指针来访问这个FRAME1对象就好了。


啥意思啊?你把对象跟类混淆了吧?
frame1在这里只是一个TFrame_PType的对象罢了
其他的FRAME可以也是TFrame_PType的对象
他们和frame1是平级的

你是这个意思吧?
lonaerd 2005-01-10
  • 打赏
  • 举报
回复
以下是主要代码:
1、主窗口调用若干frame窗口通用程序:
public
frame1:tframe;
procedure FreeAndNilFrame(var frameFlag:Tframe;flag:integer);{ Public declarations }
end;

procedure TFrm_Main.FreeAndNilFrame(var frameFlag:Tframe;flag:integer);
begin

if assigned(frameFlag) then
freeandnil(frameflag) ;

if flag=1 then //打开类别
frameFlag:= p_type.TFrame_PType.Create(self)
else if flag=2 then //打开产品管理
frameFlag:= p_name.TF_pname.Create(self) ;

frameFlag.Parent:=self;
frameFlag.Top :=Frm_Main.Panel1.Top ;

end;

那么以上主窗口的frame1中的的控件对象,如treeview,litview..该如何在另外一个窗口中访问?
lonaerd 2005-01-10
  • 打赏
  • 举报
回复
谢谢楼上理解我描述的情况。不过,要申明成自定义FRAME才可以访问:
*************************
错误:
public
frame1:tframe;
。。。
frame1:=p_type.TFrame_PType.Create(self);
调用:
MainForm.frame1.(这样是没有对象的)
*************************************
*************************
正确:
public
frame1:p_type.TFrame_PType;
。。。
frame1:=p_type.TFrame_PType.Create(self);
调用:
MainForm.frame1.treeview1.selected.text:='aaaa';

*************************************
可是我又想只定义一个frame1对象,便于所有的不同FRAME用一个对象来生成和释放;如果不同的FRAME指定不同的申明对象,那样的话释放好麻烦啊!
我想能否通过指针来访问这个FRAME1对象就好了。
myling 2005-01-10
  • 打赏
  • 举报
回复
首先更正楼主一个概念:主程序可以动态调用若干个Tframe窗口,这我想是DELPHI的特色。

这个跟delphi没啥关系,所有的OOP语言都能轻松办到,
XXX只有delphi才能办到
这样话以后别出去乱说,否则让其他语言的兄弟笑话:)

其次,没看懂你说的问题到底啥意思?反正我是没遇见过
还是把你的代码贴出来吧,问题还是应该在自已身上

想想就行了,既然是常见的,又怎么会是高难度呢,呵呵
JavaD 2005-01-10
  • 打赏
  • 举报
回复
别忘了,override Form的Destroy.或者在onDestroy中加入
FreeAndnil(Frame1)
JavaD 2005-01-10
  • 打赏
  • 举报
回复
不要把Frame1
声明在函数区,你这样没有释放是有内存泄漏的
要这样

Tform1 = class...

public
Frame1:TFrame;

procedure GenerateFrame;
begin
Frame1 := Tframe.Create...
end;

这样你才能通过Form1.Frame1来访问
end;

gegangqiao 2005-01-10
  • 打赏
  • 举报
回复
如果你实在不行就在FRAME里面写个过程在调用的单元里有过程指针去调用。
ssq237712 2005-01-09
  • 打赏
  • 举报
回复
什么意思?你frame1在public定义的啊,直接访问不行?mainform.frame1.treeview
ygflydream 2005-01-09
  • 打赏
  • 举报
回复
动态产生Tfame应该有个模板!把要编的动西先在那模板里编号!然后在主窗体里创建他!行吗!
ygflydream 2005-01-09
  • 打赏
  • 举报
回复
up!
herman~~ 2005-01-09
  • 打赏
  • 举报
回复
关注
lonaerd 2005-01-09
  • 打赏
  • 举报
回复
调用:
public
frame1:tframe;
。。。
frame1:=p_type.TFrame_PType.Create(self);

现在我新弹出个窗口,要访问frame1.treeview,该如何?
lonaerd 2005-01-09
  • 打赏
  • 举报
回复
楼上没有理解题意:整个FRAME是动态创建的,即对于新创建的这个类实例,如何来访问它?
Kshape 2005-01-09
  • 打赏
  • 举报
回复
你在设计Frame的时候,已知那个TREEVIEW是动态创建的,你想要在别的地方访问那个listview,你可以将TREEVIEW声明在public域中
lonaerd 2005-01-09
  • 打赏
  • 举报
回复
up

5,388

社区成员

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

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