建立窗体的问题 (100分)

  • 主题发起人 主题发起人 itluo
  • 开始时间 开始时间
I

itluo

Unregistered / Unconfirmed
GUEST, unregistred user!
程序代码如下:
unit cjTotal_printUt;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, QRCtrls, QuickRpt, ExtCtrls;

type
TcjTotal_printF = class(TForm)
.
.
private
{ Private declarations }
public
{ Public declarations }
end;

var
cjTotal_printF: TcjTotal_printF;

procedure show_cjTotal_printF(Aowner: Tcomponent);

implementation

uses data_pubUt,pubUt;
{$R *.dfm}

//单元接口(建立窗体)
procedure show_cjTotal_printF(Aowner: Tcomponent);
begin
with TcjTotal_printF.Create(Aowner) do
try
showmodal;
finally
free;
end;
end;
在另一窗体的SpeedButton1Click的click事件中如下调用
procedure Tdate_tjF.SpeedButton1Click(Sender: TObject);
begin
show_cjTotal_printF(self);
end;
在2000以上运行,能正常调用(建立窗体),但在98上调用却出现非法操作!
我错在哪里?(在project->options 里 cjTotal_printF 设为非自动建立)
 
procedure show_cjTotal_printF(Aowner: Tcomponent);
begin
with TcjTotal_printF.Create(nil) do
try
showmodal;
finally
free;
end;
end;
 
procedure show_cjTotal_printF(Aowner: Tcomponent);
begin
with TcjTotal_printF.Create(self) do
try
showmodal;
finally
free;
end;
end;
 
TO: lanbing1400
with TcjTotal_printF.Create(nil) do
也是同样的错误!
但在main form 上 with TcjTotal_printF.Create(self) do
就没问题!
 
直接在按纽事件下写
with TcjTotal_printF.Create(self) do
try
showmodal;
finally
free;
end;
窗体为动态创建(即把工程中该窗体从左边拖到右边)
 
TO: lanbing1400
直接在按纽事件下写,是没错误!,
但我很多其他FORM 上要建立此FORM 我不想所有想建立就写一次.
 
procedure creatform(sender:tobject);
begin
with Tform2.Create(nil) do
try
showmodal;
finally
free;
end
end;

需要时调用,试试
 
跟踪一下哪句报错:是Free,还是CreateFree,还是ShowModal,还是在主窗体关闭时报错?
如果是Free报错原因可能是这个窗口中有资源没有释放。
如果是ShowModal报错原因可能是某些对象没有正常创建。
如果是Create保错原因可能是些对象没有正常创建。比如是否有 sss.Create.
如果是主窗体关闭时报错那么可能是这个窗口的AOwner不可以置self,要NIl

另外如果是局部创建的对象那么不应该设置AOwner。
 
1,TForm1.Create(Application);
2,将Free改为Release;
 
这个也可以
1,Form1:=TForm1.Create(Application);
2,将Free改为Release;
 
TO:Yukin,journer
为何TForm1.Create(Application);时
要把FREE 该为release?
 
procedure creatform(sender:tobject);
begin
with Tform2.Create(self) do
try
showmodal;
finally
free;
end
end;
调用没有错呀,好像是可以的!

需要时调用,试试
 
RE:TO:Yukin,journer
为何TForm1.Create(Application);时
要把FREE 该为release?
这是实验的结果,没办法,呵呵
 
多人接受答案了。
 
后退
顶部