关于一个窗体的多实例问题,怎么确定哪个实例存在?(20分)

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

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
我用下面的代码创建 一个窗体的多个实例。窗体里有个timer
var
chartview:array of Tchartview;
count:byte;
begin
count := high(chartview)-low(chartview)+1;
SetLength(chartview,count+1);
chartview[high(chartview)] := Tchartview.Create(Application);
chartview[high(chartview)].show;
end;

然后在线程里要访问这些窗体实例的timer。但是我怎么知道哪个实例存在?
我在线程里这样写的,可是不对:(
if (chartview[2]<>nil) then
chartview[2].Timer1.Enabled:=true;
 
遍历所有实例,看看是否有同名存在即可.
 
怎么个意思?是说用循环吗
 
>> 我在线程里这样写的,可是不对:(
>> if (chartview[2]<>nil) then
>> chartview[2].Timer1.Enabled:=true;
在窗体释放的时候你要把数组中相关的项设为nil
可以在Form的OnDestroy里做:
for I := 0 to High(chartview) do
if chartview = Self then
chartview := nil;
然后再用你上面的代码检测就OK了.
 
不行。我加了也不行。因为现在在线程里访问实例
for i:=0 to high(chartview) do
if (chartview<>nil) then
chartview.Timer1.Enabled:=true;
根本判断不了。到这里if (chartview<>nil) then就出错。
是不是和线程的同步有关啊
 
答对了,就是线程同步问题。
 
那我怎么写啊 ?
for i:=0 to high(chartview) do
if (chartview<>nil) then
chartview.Timer1.Enabled:=true;

那里加Synchronize
 
procedure Execute
begin
Synchronize(OnCap)
end;

TOnCap = procedure of object;
TCYThread = class(TThread)
private
FOnCap: TOnCap;
protected
procedure Execute
override;
public
property OnCap: TOnCap read FOnCap write FOnCap;
end;
 
老人家, 你写的什么啊
 
To lcl_003
你的qq我忘了
我的QQ:82780254
 
[:D][:D][:D][:D][:D][:D][:D]
 
多人接受答案了。
 
后退
顶部