为什么程序在运行时建立一个窗体,有的窗体会出一个对话框提示:Access violation at address in madule '程序名.EXE' (1

  • 主题发起人 主题发起人 gxsmallboy
  • 开始时间 开始时间
G

gxsmallboy

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么程序在运行时建立一个窗体,有的窗体会出一个对话框提示:Access violation at address in madule '程序名.EXE' (100分)<br />为什么程序在运行时建立一个窗体,有的窗体会出一个对话框提示:
Access violation at address in madule '程序名.EXE'
read of address FFFFFFFF.
确定后才打开国窗体?
**********************************************************
procedure TForm_main.menuClick(Sender: TObject);
var founded:boolean;
I:integer;
begin
Founded:=False;
for i:=MDIChildCount-1 downto 0 do
if MDIChildren.ClassName='TForm_llq_Fcckdj' then
begin
//MDIChildren.show ;
Founded:=True;
break;
end;
if Not Founded then
begin
Form_llq_Fcckdj:=TForm_llq_Fcckdj.Create(application); //程序运行到这名时,就出现我以上听的提示对话框。
end;
Form_llq_Fcckdj.show;
if Form_llq_Fcckdj.WindowState =wsMinimized then
Form_llq_Fcckdj.WindowState :=wsNormal;
end;
 
Form_llq_Fcckdj是否已经创建??
try
begin
try
Form_llq_Fcckdj.free;
except
//
end;

Form_llq_Fcckdj:=TForm_llq_Fcckdj.Create(application); end;
 
改成:
procedure TForm_main.menuClick(Sender: TObject);
begin
if not assign(Form_llq_Fcckdj) then
Form_llq_Fcckdj:=TForm_llq_Fcckdj.Create(application);
Form_llq_Fcckdj.show;
if Form_llq_Fcckdj.WindowState =wsMinimized then
Form_llq_Fcckdj.WindowState :=wsNormal;
end;

另外在其onclose事件里面加入:
action:=caFree;
Form_llq_Fcckdj:=nil;
 
那是因为你的窗口还没有创建就去打开这个窗口
或者是这窗口以前创建了,但没有释放又再次创建这个窗口
所以只要把创建窗口、打开窗口与释放窗口的顺序理顺就OK啦!
 
但就是只一两个子窗体出现以上错误,
其它的有十多个子窗体都是一样的方法创建也没事。
到底是为什么?
关闭窗体时一定要这句吗?
Form_llq_Fcckdj:=nil;
我的其它的子窗体都没有这句哦。[:D][8D][:)][:(!][?]
 
*********************************
以上的代码有可能先打开才创建吗?
*********************************
 
你可以试试呵
 
**************************************************************************
to vine:
**************************************************************************
试过,这句出错:
if not assign(Form_llq_Fcckdj) then
出错提示:
[Error] Unit_main.pas(596): Operator not applicable to this operand type
**************************************************************************
 
呵,不好意思,匆忙间打错了

应为:if not assigned(Form_llq_Fcckdj) then
 
可能是资源不足。
编译后关闭delphi,单独运行exe是否有此情况?
 
********************************************************
to vine:
********************************************************
还是不行。
出错提示改为,
Access violation at address in 00450c50 madule '程序名.EXE'
read of address 0255c404.
********************************************************
********************************************************
to zhukewen:
********************************************************
关了所有程序,单独运行exe还是出现那情况。

********************************************************
[:)][:D][8D][:(!][^][?]
 
各位,多谢了,
我不懂为什么?今早刚来到运行就不出错了?
 
那就真的可能是资源利用问题了。
 
但我没有设置或修改过什么啊??
你们创建 窗体的时候。一搬用什么?
Form_llq_Fcckdj:=TForm_llq_Fcckdj.Create(application);
或:
Application.CreateForm(TForm_llq_Fcckdj, Form_llq_Fcckdj);
或:
其它。
 
datamadule要作为自动创建的对象,有的数据源可能还未连接到数据表。
 
对于MDI程序
建立子窗体
可以用with do结构来呵
如:with TForm_llq_Fcckdj.Create(application) do
begin
show;
if WindowState =wsMinimized then WindowState :=wsNormal;
end;

在子窗体的onclose事件里:  action:=caFree;

这样就可以了,而且效果还可以!
 
我看到了你发给我的信息,我不知道怎么回答你,没找到在哪回答。
你可以在DELPHI中的TOOLS--&gt;ENVIR..OPTIONS--&gt;LIB页码下输入你的SYS*.pas的路径。

怎么给你分数还不算作弊???要不和斑竹说说吧?!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
954
DelphiTeacher的专栏
D
后退
顶部