求助啊求助,问题如下;
我有俩个窗体。但是他们不是主副窗体的关系。我是通过一个窗体来创建另一个窗体。
在要动态创建的窗体哩,我写了一个线程。然后线程的主要作用是是调用本窗体的一个控件。代码是这样的:
下面的这个是窗体2的代码
var
Form2: TForm2;
num:Integer;implementation{$R *.dfm}{线程入口函数}
function MyThreadFun(p: Pointer): Integer; stdcall;//这里的P用来接收结构体得地址。用来释放内存用的 ,同时也是用来移除Tlist的地址的
//也是用来释放画图颜色的begin
Sleep(500);
Form2.AdvStringGrid1.ColorsTo[pcolorcell(p).col,pcolorcell(p).row]:=clRed;
FreeMem(p);end; 写好了以后。然后在窗体一中。动态生成窗体2.但是很奇怪的时候。窗体2的线程能用。但是调用窗体2上的AdvStringGrid1是失败的、。
后来。我自己试验了下。。动态生成窗体以后这个Form2的为nil的。
所以我想求助各位大侠们。给小弟说说。动态生成窗体以后里面其中的关系。还有为什么。。这个form2=nil
我有俩个窗体。但是他们不是主副窗体的关系。我是通过一个窗体来创建另一个窗体。
在要动态创建的窗体哩,我写了一个线程。然后线程的主要作用是是调用本窗体的一个控件。代码是这样的:
下面的这个是窗体2的代码
var
Form2: TForm2;
num:Integer;implementation{$R *.dfm}{线程入口函数}
function MyThreadFun(p: Pointer): Integer; stdcall;//这里的P用来接收结构体得地址。用来释放内存用的 ,同时也是用来移除Tlist的地址的
//也是用来释放画图颜色的begin
Sleep(500);
Form2.AdvStringGrid1.ColorsTo[pcolorcell(p).col,pcolorcell(p).row]:=clRed;
FreeMem(p);end; 写好了以后。然后在窗体一中。动态生成窗体2.但是很奇怪的时候。窗体2的线程能用。但是调用窗体2上的AdvStringGrid1是失败的、。
后来。我自己试验了下。。动态生成窗体以后这个Form2的为nil的。
所以我想求助各位大侠们。给小弟说说。动态生成窗体以后里面其中的关系。还有为什么。。这个form2=nil
另外我看到LZ传入了一个p指针然后在线程里去释放他,这点要特别注意,你需要保证每个线程传入的指针都是不同的,而且传入指针以及线程释放指针不会影响到其它线程