在线程里如何判断一个窗体的多实例?(50分)

  • 主题发起人 主题发起人 lcl_003
  • 开始时间 开始时间
L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
我动态的创建了一个窗体的多个实例
var
chartview:array of Tchartview;
count:byte;
begin
count := high(chartview1)-low(chartview1)+1;
SetLength(chartview1,count+1);
chartview1[high(chartview1)] := Tchartview.Create(self);
chartview1[high(chartview1)].show;
end;
窗体里有个timer
然后我在线程里判断如果存在几个实例就让它们的timer都启动
procedure mythread.seechartview();
var
i:byte;
begin
for i:=0 to high(chartview1) do
begin
if chartview1<>nil then //但没判断到这里就出错
chartview1.Timer1.Enabled:=true;
end;
end;

但是我在启动线程之前必须创建一个窗体实例才不会出错,if chartview1<>nil then
好象没用啊,我想得到的结果是如果没有一个实例存在那就什么也不做,如果存在那就让它
的timer启动,该怎么写?
 
当你启动时没有创建实例,这时你使用high(chartview1)就出错了。所以在循环之前应当判断
charview1是否已经创建实例,如果没有创建就不要进入循环了。
 
可以先FINDWINDOWS,判断已经存在,然后进行操作

 
哦,我也试过把if chartview1<>nil then放到循环外边,但是我还是不清楚如何判断
chartview是否已经创建了实例。if chartview1[0]<>nil then 也不对
该怎么判断啊
 
自定义一个类,类包含Timer组件
TMyView = class(TCharViwe)
MyTimer : TTimer;
procedure Timer1Timer(Sender: TObject);
..............
constructor TMyView.Create(AOwner:TComponent);
begin
var
............
MyTimer ;=create(TCharView);
MyTimer.OnTimer := Timer1Timer;
 
journer, findwindows()里的参数我写什么?我的窗体实例可是不确定的啊
troyliu, 没明白你的意思。
我现在就是想在线程里
procedure mythread.seechartview();
var
i:byte;
begin //在循环前判断是否有实例存在
for i:=0 to high(chartview1) do
begin
if chartview1<>nil then //但没判断到这里就出错
chartview1.Timer1.Enabled:=true;
end;
end;
 
procedure mythread.seechartview();
var
i:byte;
begin
if chartview1<>nil then
begin
for i:=0 to high(chartview1) do
begin
if chartview1<>nil then //但没判断到这里就出错
chartview1.Timer1.Enabled:=true;
end;
end;
end;
 
哦,原来这么简单:(
 
后退
顶部