1:是你的SetFocus时到一个enabled=False的控件上。
2:是你的form没有自动创建(fsMDIChild)!

解决方案 »

  1.   

    肯定是form创建和显示的问题,设断点调试一下。
      

  2.   

    如果是form创建有问题,那应该怎么修改????
      

  3.   

    这是主窗体的程序:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Menus,unit2,unit3,unit4, Db, ADODB;type
      TForm1 = class(TForm)
        MainMenu1: TMainMenu;
        N1: TMenuItem;//拨款计划处理
        N2: TMenuItem;//拨款计划录入
        N3: TMenuItem; //拨款处理
        N4: TMenuItem; //拨款计划查询
        N5: TMenuItem; //帐务及单据打印
        N6: TMenuItem; //凭证管理
        N7: TMenuItem; //明细帐管理
        N8: TMenuItem; //资金平衡表
        N9: TMenuItem; //科目汇总表
        N11: TMenuItem; //部门编码及会计科目管理
        N12: TMenuItem; //部门编码管理
        N13: TMenuItem; //会计科目信息管理
        N14: TMenuItem; //系统管理
        N15: TMenuItem; //用户信息管理
        N16: TMenuItem; //注册新用户
        N17: TMenuItem; //退出
        N18: TMenuItem; //退出
        N19: TMenuItem;
        N20: TMenuItem; //系统设定
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        ADOQuery1f_jz: TIntegerField;
        ADOQuery1f_jh: TIntegerField;
        procedure N18Click(Sender: TObject);
        procedure N2Click(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure N12Click(Sender: TObject);
        procedure N4Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses unit5, Unit6, Unit7, Unit8, Unit9;{$R *.DFM}procedure TForm1.N18Click(Sender: TObject);  //退出系统
    begin
    close;
    end;procedure TForm1.N2Click(Sender: TObject); //调拨款计划录入界面
    var
     i,j,k,l,m,n:integer;
    begin
     m:=1;  //   m
     form2.ADOQuery1.First;
     if form2.adoquery1.recordcount<>0 then//如果拨款临时表不为空,则
     begin
      if form2.ADOQuery1f_pf.value=0 then//如果批复标记=0,批复中,则
       begin
        MessageDlg('上次拨款计划正在批复中,请等候',mtinformation,[mbYes],0);
        form1.Show;
       end;  if form2.ADOQuery1f_pf.value=2 then//如果批复标记=2,批复失败,则
       begin
        i:=MessageDlg('上次拨款计划未被批复,是否修改该次拨款计划,并重新申请批复?',mtinformation,[mbYes,mbNo],0);   //   i
        if i=mryes then//进入拨款计划界面,进行修改上次的拨款计划    i
        begin
         form2.DBGrid1.enabled:=true;
         form2.FlatButton1.Enabled:=false;
         form2.FlatButton2.Enabled:=true;
         form2.FlatButton4.Enabled:=true;
         form2.show;
         form1.enabled:=false;
        end
        else form1.show;
       end;  if form2.ADOQuery1f_pf.value=1 then//如果批复标记=1,批复成功,则
       begin
        if form2.ADOQuery1f_pz.value=0 then//如果凭证标记=0,未生成凭证,则
         begin
          MessageDlg('上次批复的拨款计划未生成凭证,请先将上次拨款计划生成凭证,并申请稽核。',mtinformation,[mbYes],0);
          form1.show;
         end
        else  //如果凭证标记<>0,已生成凭证,则
         begin
          j:=form2.ADOQuery1f_pz.value; //根据凭证标记的内容查找相应的凭证号记录的记帐标记及稽核标记    j
          //m.asstring:=year;
          adoquery1.Close ;
          adoquery1.Parameters[0].value:=j;  //   j
          adoquery1.parameters[1].value:=form2.ADOQuery1f_year.Value ;
          //adoquery1.Close;
          //adoquery1.SQL.Clear;
          //adoquery1.sql.add('select f_jz,f_jh from pznumber');
          //adoquery1.SQL.Add('where f_pznumber='''+inttostr(j)+''' and f_year='''year'''');
          //**adoquery1.Parametersbyname('j'):=form2.ADOQuery1f_pz.value;
          //adoquery1.Open;
          adoquery1.Open ;
          adoquery1.Prepared ;
          adoquery1.ExecSQL ;      k:=form1.ADOQuery1f_jh.Value; //    k
          l:=form1.adoquery1f_jz.value; //     l
          //k:=2;
          if m=1 then
          begin
          if k=0 then //如果稽核标记=0,稽核中,则
           begin
           MessageDlg('上次拨款计划的凭证正在稽核中,请等待 ',mtinformation,[mbYes],0);
           form1.show;
           end;      if k=2 then //如果稽核标记=2,稽核失败,则
           begin
           MessageDlg('上次拨款计划的凭证稽核失败,请先修改该张凭证,并重新申请稽核。',mtinformation,[mbYes],0);
           form1.show;
           end;      if k=1 then//如果稽核标记=1,稽核成功,则
           begin        if l=0 then//如果记帐标记=0,未记帐,则
            begin
            MessageDlg('上次拨款计划的凭证稽核成功,但还没有记帐,请先将该凭证记帐。',mtinformation,[mbYes],0);
            form1.show;
            end;        if l=1 then//如果记帐标记=1,已记帐,则
            begin
             form2.ADOQuery1.First;
             for n:=0 to form2.ADOQuery1.RecordCount-1 do //   n
               begin
                   form2.ADOQuery1.Delete;
                   form2.ADOQuery1.Next;
               end;
             form2.ADOQuery1.UpdateBatch;
             form2.DBGrid1.Enabled:=false;
             form2.ComboBox1.Enabled:=false;
             form2.FlatButton2.Enabled:=false;
             form2.FlatButton4.Enabled:=false;
             form2.show;
             form1.enabled:=false;
            end;       end;
          end; 
         end;
       end;
     end
     else  //如果拨款临时表为空,则
      begin   //调出拨款计划录入界面。
       form2.DBGrid1.Enabled:=false;
       form2.ComboBox1.Enabled:=false;
       form2.FlatButton2.Enabled:=false;
       form2.FlatButton4.Enabled:=false;
       form2.show;
       form1.enabled:=false;
      end
    end;procedure TForm1.FormPaint(Sender: TObject);//背景颜色渐变
    var
    I:word ;
    Y,YStep: Real;
    begin
      Y:=0; // 设置Y方向的初始值
    YStep:=ClientHeight/256; // 设置步长
    for I:=255 downto 0 do
     begin
      Canvas.Brush.Color:=$0000000+i*$10000; // 改变颜色
      Canvas.FillRect(Rect(0,Round(Y),ClientWidth,Round(Y+YStep)));
      Y:=Y+YStep;
     end;
    end;procedure TForm1.N12Click(Sender: TObject);//调部门编码管理界面
    begin
    form3.show;
    form1.enabled:=false;
    form3.flatbutton2.enabled:=false;
    end;procedure TForm1.N4Click(Sender: TObject);//调拨款计划查询界面
    begin
    form4.show;
    form1.enabled:=false;
    end;end.
      

  4.   

    form3.flatbutton2.enabled:=false;
    应写在FORM3的OnShow事件中。form1.enabled:=false;
    这句好象没有必要,不明白为什么你这么写?
      

  5.   

    问题不在主程序,肯定在unit2,3,4中,
    检查各form的oncreate事件代码,确保里面没有调用xxxx.setfocus
    ^_^
      

  6.   

    njbudong(南京不懂) ,谢了,按你说的,查到问题了,也解决了。