我在一个窗体里用timer画线,然后创建了多个这个窗体的实例,我在另外一个窗体里循环
的判断有几 个窗体实例存在,如果存在就让它画线。
但是现在的问题是我打开画线窗体的多实例后,不能关任何一个,一关就提示not enough timers available
这是因为什么?画线的
procedure Tchartview.Timer1Timer(Sender: TObject);
var
j,i: integer;
begin
tmp := selectchan(StrToInt(combobox1.Text));
if (strtoint(combobox1.Text)>0) and (strtoint(combobox1.Text)<=16) then
for j := 0 to 49 do
begin
valcom1[1, j] := ((recv401[j * 96 + 497 + (tmp.a - 1) * 6] * 256 +
recv401[j * 96 + 496 + (tmp.a - 1) * 6])-32767)/32767*Tfull1[tmp.a];
series1.Add(valcom1[1, j]);
valload1[1, j] := ((recv401[j * 96 + 499 + (tmp.a - 1) * 6] *
256 + recv401[j * 96 + 498 + (tmp.a - 1) * 6])-32767)/32767*Tfull1[tmp.a];
series2.Add(valload1[1, j]);
valdis1[1, j] := ((recv401[j * 96 + 501 + (tmp.a - 1) * 6] *
256 + recv401[j * 96 + 500 + (tmp.a - 1) * 6])-32767)/32767*Tfull1[tmp.a];
series3.Add(valdis1[1, j]);
end;
if series1.Count > chart1.BottomAxis.Maximum then
begin
series1.Clear;
series2.Clear;
series3.Clear;
end;
timer1.Enabled := False;
end;
另外一个timer判断一个窗体的多实例
if chartview1 <> nil then
for i := 0 to high(chartview1) do
begin
if chartview1[i] <> nil then
chartview1[i].Timer1.Enabled := True;
end;chartview1定义
var
chartview: Tchartview;
chartview1: array of Tchartview;
的判断有几 个窗体实例存在,如果存在就让它画线。
但是现在的问题是我打开画线窗体的多实例后,不能关任何一个,一关就提示not enough timers available
这是因为什么?画线的
procedure Tchartview.Timer1Timer(Sender: TObject);
var
j,i: integer;
begin
tmp := selectchan(StrToInt(combobox1.Text));
if (strtoint(combobox1.Text)>0) and (strtoint(combobox1.Text)<=16) then
for j := 0 to 49 do
begin
valcom1[1, j] := ((recv401[j * 96 + 497 + (tmp.a - 1) * 6] * 256 +
recv401[j * 96 + 496 + (tmp.a - 1) * 6])-32767)/32767*Tfull1[tmp.a];
series1.Add(valcom1[1, j]);
valload1[1, j] := ((recv401[j * 96 + 499 + (tmp.a - 1) * 6] *
256 + recv401[j * 96 + 498 + (tmp.a - 1) * 6])-32767)/32767*Tfull1[tmp.a];
series2.Add(valload1[1, j]);
valdis1[1, j] := ((recv401[j * 96 + 501 + (tmp.a - 1) * 6] *
256 + recv401[j * 96 + 500 + (tmp.a - 1) * 6])-32767)/32767*Tfull1[tmp.a];
series3.Add(valdis1[1, j]);
end;
if series1.Count > chart1.BottomAxis.Maximum then
begin
series1.Clear;
series2.Clear;
series3.Clear;
end;
timer1.Enabled := False;
end;
另外一个timer判断一个窗体的多实例
if chartview1 <> nil then
for i := 0 to high(chartview1) do
begin
if chartview1[i] <> nil then
chartview1[i].Timer1.Enabled := True;
end;chartview1定义
var
chartview: Tchartview;
chartview1: array of Tchartview;
if chartview1[i] <> nil then
chartview1[i].Timer1.Enabled := True;
的判断就会有问题,因为该窗体上的TIMER已经释放了,导致异常;
有release吗? 同意outer2000(天外流星) 需要设nil
procedure Tchartview.FormClose(Sender: TObject; var Action: TCloseAction);
begin
chartview:=nil;
action := cafree;
end;
还是报同样的错误:(