当创建多个窗口时出现 A Win32 API function failed.错误,是delphi5,在2000下正常,在98时才会出错,有时好,有时坏,是怎么一回事?(多个窗口没有释放)

解决方案 »

  1.   

    是不是你重复创建体时没朋给它的name命名啊? 这样就重名了.另外,你创建的窗体,在关闭时有没有free?
      

  2.   

    创建的时候要这样
    try  
     if not assigned(Form1) then
      Form1 := TForm1.Create(Application);
      Form1.ShowModal;
    finally
      FreeAndNil(Form1);
    end;
      

  3.   

    Application.CreateForm(TForm27, Form27);
      Application.CreateForm(TForm54, Form54);
      Application.CreateForm(TForm55, Form55);
      Application.CreateForm(TForm56, Form56);
      Application.CreateForm(TForm57, Form57);
      Application.CreateForm(TForm58, Form58);
      Application.CreateForm(TForm59, Form59);
      Application.CreateForm(TForm60, Form60);
      Application.CreateForm(TForm61, Form61);
      Application.CreateForm(TForm62, Form62);
      Application.CreateForm(TForm64, Form64);
      Application.CreateForm(TForm69, Form69);
      Application.CreateForm(TForm70, Form70);
      Application.CreateForm(TForm73, Form73);
      Application.CreateForm(TForm74, Form74);
      Application.CreateForm(TForm75, Form75);
      Application.CreateForm(TForm77, Form77);
      Application.CreateForm(TForm48, Form48);
      Application.CreateForm(TForm71, Form71);
      Application.CreateForm(TForm79, Form79);
      Application.CreateForm(TForm80, Form80);
      Application.CreateForm(TForm81, Form81);
      Application.CreateForm(TForm84, Form84);
      Application.CreateForm(TForm85, Form85);
    可以保证窗体只创建一次,在WIN2000下运行正确,在98下,会出现A Win32 API function failed错误,出错是在show的时候出错,在窗体show时有对数据库进行操作,我想是不是对数据库进行操作时出的错,数据库操作代码;
    procedure TForm71.FormShow(Sender: TObject);
    begin
      querystr:='select 司机姓名 from sjdn.dbf order by 司机姓名';
      DM.sqlexe(Querystr);
      DM.Query1.Open;
      Combobox1.Clear ;
      Combobox1.Items.Add('');
      while not DM.Query1.Eof do
        begin
          Combobox1.Items.Add(DM.Query1.fieldbyname('司机姓名').AsString);
          DM.Query1.Next ;
        end;
    end;
      

  4.   

    你先将Application.CreateForm(TForm71, Form71);这句注释掉,就知道是否是数据库问题了!
      

  5.   

    我猜他的DM应该是个DataModule窗体。
    老兄,这样创建窗体不好吧。最好动态创建,程序启动时就只需创建DataModule和主窗体就可以了,在适当的时候再创建你要打开的窗体。你这样的话,只要其中的某一个窗体在创建时出了问题,程序立马就完了。你说呢。
      

  6.   

    资源太小了,也就无法完成你的SQL操作!导致查询出错!
      

  7.   

    听从大家的意见,现在是创建一个窗体,要判断是否已创建过,如用户最小化了,就不能再创建一次,因此怎么判断一个窗体已创建且没释放过,

    if not assigned(Form5) then
        Form5 := TForm5.Create(Application);
    不能判断释放过的窗体,如 action;=cafree了,