procedure TNtTrainFrm.BitBtn2Click(Sender: TObject); var NtMemberFrm:TNtMemberFrm; begin close; NtMemberFrm:=TNtMemberFrm.Create(Self);//改之 try NtMemberFrm.show; except halt;//这样不好的:) end;
请问 ihihonline(小小->充电中……) 为什么不好? 我想如果系统有问题直接退出!
procedure TMainFrm.SpeedButton12Click(Sender: TObject); var NtTrainFrm:TNtTrainFrm; NtMemberFrm:TNtMemberFrm; NtStatMonthFrm:TNtStatMonthFrm; NtRetriewFrm:TNtRetriewFrm; begin NtTrainFrm:=TNtTrainFrm.Create(self); NtMemberFrm:=TNtMemberFrm.Create(self); NtStatMonthFrm:=TNtStatMonthFrm.Create(self); NtRetriewFrm:=TNtRetriewFrm.Create(self); try NtTrainFrm.showmodal; if NtTrainFrm.ModalResult=mrCancel then begin try NtMemberFrm.showmodal; if NtMemberFrm.ModalResult=mrCancel then begin try NtStatMonthFrm.ShowModal; if NtStatMonthFrm.ModalResult=mrCancel then begin try NtRetriewFrm.ShowModal; if NtRetriewFrm.ModalResult=mrCancel then
2、如果窗口不是主窗口,Close时,BCB仅仅隐藏该对话框,要想真正释放内存
必须在FormClose中编码:
void __fastcall TForm1::FormClose(...)
{
Action=caFree;
}
procedure TMainFrm.FormShow(Sender: TObject);
var
NtTrainFrm:TNtTrainFrm;
begin
NtTrainFrm:=TNtTrainFrm.Create(Application);
try
NtTrainFrm.show;
except
halt;
end;
end;在第一个提醒窗口中创建第二个提醒窗口(按下Bitbtn2按钮第一个窗口释放,第二个提醒窗口弹出)
procedure TNtTrainFrm.BitBtn2Click(Sender: TObject);
var
NtMemberFrm:TNtMemberFrm;
begin
close;
NtMemberFrm:=TNtMemberFrm.Create(Application);
try
NtMemberFrm.show;
except
halt;
end;
end;
第一个提醒窗口的释放通过关闭窗口实现
procedure TNtTrainFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=cafree;
end;以上有何不对,请指教
2问题:调用一个窗口后,close当然没有释放内存,你要在调出的FORM的ONCLOSE事件中写入action:=cafree;才能释放内存
3问题:当然是不自动创建,在程序中创建比较好一些喽,不然系统资源会让你的程序消耗好多,如果能把一些FORM写在DLL中调用也可以。
var
NtMemberFrm:TNtMemberFrm;
begin
close;
NtMemberFrm:=TNtMemberFrm.Create(Self);//改之
try
NtMemberFrm.show;
except
halt;//这样不好的:)
end;
我想如果系统有问题直接退出!
var
NtTrainFrm:TNtTrainFrm;
NtMemberFrm:TNtMemberFrm;
NtStatMonthFrm:TNtStatMonthFrm;
NtRetriewFrm:TNtRetriewFrm;
begin
NtTrainFrm:=TNtTrainFrm.Create(self);
NtMemberFrm:=TNtMemberFrm.Create(self);
NtStatMonthFrm:=TNtStatMonthFrm.Create(self);
NtRetriewFrm:=TNtRetriewFrm.Create(self);
try
NtTrainFrm.showmodal;
if NtTrainFrm.ModalResult=mrCancel then
begin
try
NtMemberFrm.showmodal;
if NtMemberFrm.ModalResult=mrCancel then
begin
try
NtStatMonthFrm.ShowModal;
if NtStatMonthFrm.ModalResult=mrCancel then
begin
try
NtRetriewFrm.ShowModal;
if NtRetriewFrm.ModalResult=mrCancel then
finally
NtRetriewFrm.free;
end;
end;
finally
NtStatMonthFrm.free;
end;
end;
finally
NtMemberFrm.free;
end;
end;
finally
NtTrainFrm.free;
end;
end;这样可以吧?