求解:Frame 动态创建及释放遇到的问题? ( 积分: 100 )

  • 主题发起人 主题发起人 lxl1227
  • 开始时间 开始时间
L

lxl1227

Unregistered / Unconfirmed
GUEST, unregistred user!
一个窗体上左边是rzgroup控件(用的是raize3.0套件,实现类似outlook侧边栏多页功能控件),右边是一个panel容器,想实现如下功能:点击左边每页的图标,右边panel即动态加载相应的frame,并将frame上的控件初始化,每个frame上有一个关闭按钮。源代码如下(有三个frame):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzGroupBar, ExtCtrls, RzPanel;

type
TForm1 = class(TForm)
RzPanel1: TRzPanel;
RzGroupBar1: TRzGroupBar;
RzGroup1: TRzGroup;
RzGroup2: TRzGroup;
RzPanel2: TRzPanel;

procedure RzGroup1Items0Click(Sender: TObject);
procedure RzGroup1Items1Click(Sender: TObject);
procedure RzGroup2Items0Click(Sender: TObject);
private
{ Private declarations }

public
{ Public declarations }

end;

var
Form1: TForm1;

implementation
uses Unit2,Unit3,Unit4;

{$R *.dfm}
procedure TForm1.RzGroup1Items0Click(Sender: TObject);
var
a:Tframe2;
begin
a:=Tframe2.Create(Self);
a.Parent:=RzPanel2;
a.Top:=1;
a.Left:=1;
a.Align:=alClient;
a.edt1.Text:='';
a.edt2.Text:='';
end;
procedure TForm1.RzGroup1Items1Click(Sender: TObject);
var
a:Tframe3;
begin
a:=Tframe3.Create(Self);
a.Parent:=RzPanel2;
a.Top:=1;
a.Left:=1;
a.Align:=alClient;
a.edt1.Text:='';
a.edt2.Text:='';
end;
procedure TForm1.RzGroup2Items0Click(Sender: TObject);
var
a:Tframe4;
begin
a:=Tframe4.Create(Self);
a.Parent:=RzPanel2;
a.Top:=1;
a.Left:=1;
a.Align:=alClient;
a.edt1.Text:='';
a.edt2.Text:='';
end;
end.

问题1:如何实现可以某个页面的多次选择,(即选择其它frame时,立即释放当前frame)我用了如下代码,报错
var
a:tframe2
begin
if a<>nil then freeandnil(a)
else
a:=tframe2.create(self);
.......

问题2:每个frame上面的关闭按钮如何实现frame的关闭??
 
没用过,猜测是不是frame上的其他控件没释放掉啊?
或者用属性就好了,我想visible也应该可以实现把
以上均为猜测。仅供参考
 
就是等待求解啊。frame上的其它控件不是动态生成的,是设计时就作上去的啊,难道也要手工释放掉啊?visible我想是可以实现的,不过这样对内存消耗挺大的,我还是想把frame释放掉
 
三个Frame各用一个窗体级变量或全局变量指示,而不用要局部变量.
 
我换成全局变量后,
begin
if a<>nil then freeandnil(a)不会出错了,但是a.edt1.text:='';又不能访问frame内的edit控件了,请问高手要怎么实现,还有就是if a<>nil then freeandnil(a)不能实现各个frame之间的切换,为什么测定要点击鼠标两次才能关闭,我是初学,请各位高手多多指教哈
 
后退
顶部