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;
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;
就是第一个运行后,关闭报错。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建立的方法。
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;===================================================你的窗体可能碰到异常了 换成我上面给你改的试试 把窗体创建写到保护之前试试
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
begin
form_hztj := TForm_hztj.Create(self);
try
form_hztj.ShowModal;
finally
form_hztj := nil ;
end;
end;
这段代码写得并不好 问题可能出在这里! 你这是作为父窗体的成员创建的
那么写不好,该如何写呢,我都是这么写的