procedure TForm_hztj.Gethzpvxx;
var hzpvlabelarr:array[1..28] of Tlabel;
    sql,xxx:string;
    i,j,k,zdjg,zxjg:integer ;  //zdjg 最大间隔   zxjg 最新间隔
    sl,Tempsl: Tstringlist;
    h,topsize:integer;
begin
  for i:=0 to 27 do
    begin
      hzpvlabelarr[i+1]:=Tlabel.create(self);
      sl:=Tstringlist.Create;
      tempsl:= tstringlist.Create;
      sql := 'select id from hmxx where hz= ''' + inttostr(i) +''''+' order by id ';
      dm.DataModule1.Q_S_hmxx.Close;
      dm.DataModule1.Q_S_hmxx.SQL.Clear;
      dm.DataModule1.Q_S_hmxx.SQL.Add(sql);
      dm.DataModule1.Q_S_hmxx.Open;
      if dm.DataModule1.Q_S_hmxx.RecordCount > 3 then
        begin
          dm.DataModule1.Q_S_hmxx.First;
          while not dm.DataModule1.Q_S_hmxx.Eof do
            begin
              Tempsl.Append(dm.DataModule1.Q_S_hmxx.FieldByName('id').AsString);
              dm.DataModule1.Q_S_hmxx.Next;
            end;
          dm.DataModule1.Q_S_hmxx.Close;
          dm.DataModule1.Q_S_hmxx.SQL.Clear;
          dm.DataModule1.Q_S_hmxx.SQL.Add('select max(id) as maxid from hmxx ');
          dm.DataModule1.Q_S_hmxx.Open;
          Tempsl.Add(IntToStr(dm.DataModule1.Q_S_hmxx.FieldByName('maxid').Asinteger));          for j:=0 to Tempsl.Count -2 do
             begin
               sl.Add(IntToStr(StrTOInt(Tempsl.Strings[j+1])-StrtoInt(Tempsl.Strings[j])));             end;
           zxjg :=  StrToInt(sl.Strings[sl.count-1]);
           zdjg :=  StrToInt(sl.Strings[0]);          for k:=0 to sl.Count - 2 do
            begin
              if StrToInt(sl.Strings[k]) > zdjg then
                zdjg := StrToInt(sl.Strings[k]);
            end;
          with hzpvlabelarr[i] do
             begin
               autosize:=true;
               font.Color :=clblack;
               font.Name :='宋体';
               font.Size :=9;
               Color := clRed ;
               left:=(i+1)*23;
               //height :=zdjg;
               top:=320;
               //topsize:=topsize+13;               caption:=IntToStr(zdjg)+#13+'/'+#13+IntToStr(zxjg) ;
               width :=17;
             end;
          Form_hztj.InsertControl(hzpvlabelarr[i]);
          xxx:= sl.Strings[0];
          sl.Free;
          Tempsl.Free;
         // hzpvlabelarr[i].Free;
       end
      else
        begin
         with hzpvlabelarr[i+1] do
             begin
               autosize:=true;
               font.Color :=clblack;
               font.Name :='宋体';
               font.Size :=9;
               Color := clRed ;
               height := 10 ;
               left:=(i+1)*23;
               top:=320;
               topsize:=topsize+13;               caption:='??'+#13+'/'+#13+'??' ;
               width :=17;
             end;
          Form_hztj.InsertControl(hzpvlabelarr[i+1]);
         end;
    end;end;这样动态创建了28个,这些需要关闭窗口时候释放吗?
我另外一个form里面也这么创建了16个,但是那个没有问题。
这个form里面不知道为什么又问题。另外一个OK的
procedure TForm_joxx.jobdxbtj;
var jobdxblabelarr:array[1..16] of Tlabel;
    i,topsize:integer;
begin
  topsize:=0;
  for i:=1 to 16 do
    begin
       jobdxblabelarr[i]:=Tlabel.create(self);
          with jobdxblabelarr[i] do
            begin
               autosize:=true;
               font.Color :=clblack;
               font.Name :='宋体';
               font.Size :=9;
               Color := clRed ;
               left:=80;
               top:=220-topsize;
               topsize:=topsize+13;               caption:=IntToStr(GetNoTj('job dxb',Memo_JobDxbTj.Lines.Strings[i-1],'hmxx'));
               width :=10+ GetNoTj('job dxb',Memo_JobDxbTj.Lines.Strings[i-1],'hmxx');
     end;
        Form_joxx.Panel6.InsertControl(jobdxblabelarr[i]);
  end;
end;

解决方案 »

  1.   

    这2个运行都没有什么问题,
    就是第一个运行后,关闭报错。procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
        form_hztj := TForm_hztj.Create(self);
        form_hztj.ShowModal;
      finally
        form_hztj := nil ;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      try
        form_joxx := TForm_joxx.Create(self);
        form_joxx.ShowModal;
      finally
        form_joxx := nil ;
      end;
    end;
    这个是2个form建立的方法。
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      form_hztj := TForm_hztj.Create(self);
      try
        form_hztj.ShowModal;
      finally
        form_hztj := nil ;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      form_joxx := TForm_joxx.Create(self);
      try
        form_joxx.ShowModal;
      finally
        form_joxx := nil ;
      end;
    end;===================================================你的窗体可能碰到异常了 换成我上面给你改的试试 把窗体创建写到保护之前试试
      

  3.   

    with hzpvlabelarr[i+1] do  //i+1
                 begin
                   autosize:=true;
                   font.Color :=clblack;
                   font.Name :='宋体';
                   font.Size :=9;
                   Color := clRed ;
                   left:=(i+1)*23;
                   //height :=zdjg;
                   top:=320;
                   //topsize:=topsize+13;               caption:=IntToStr(zdjg)+#13+'/'+#13+IntToStr(zxjg) ;
                   width :=17;
                 end;
              Form_hztj.InsertControl(hzpvlabelarr[i+1]); //i+1
              xxx:= sl.Strings[0];
              sl.Free;
              Tempsl.Free;
             // hzpvlabelarr[i+1].Free;
           end
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      form_hztj := TForm_hztj.Create(self);
      try
        form_hztj.ShowModal;
      finally
        form_hztj := nil ;
      end;
    end;
    这段代码写得并不好 问题可能出在这里! 你这是作为父窗体的成员创建的
      

  5.   

    hzpvlabelarr[i]  已经找到问题乐,这里应该是i+1.因为I是0开头的循环呵呵winxkm(蹩脚的程序员) ( )
    那么写不好,该如何写呢,我都是这么写的