快帮帮我啊(50分)

  • 主题发起人 主题发起人 牛龙
  • 开始时间 开始时间

牛龙

Unregistered / Unconfirmed
GUEST, unregistred user!
Please help me!
这是一个与线程有关的问题
以下是我的程序
unit1:
unit1
uses classes,uni3;
...
Tabc=class(TThread);
...
procedure Tabc.execute;
var
~~~~~
form3:Tform3;
~~~~~~~~~~~~~~
begin
form3:=Tform3.create(form3);
form3.showmodal;
end;
end.
unit3 是Tform3的单元.
但是一运行就在 'form3.showmodal;'的地方出错.后来我作了如下改动
就好了:
将 form3 定义为 Tabc的一个域.
代码如下:
unit1:
unit1
uses classes,uni3;
...
Tabc=class(TThread);
protect:
form3:Tform3;
~~~~~~~~~~~~~~
...
procedure Tabc.execute;
begin
form3:=Tform3.create(form3);
form3.showmodal;
end;
end.
我不知道这是因为什么原因,有谁能给我解答一下.谢谢
 
在线程中使用VCL对象的属性和方法时,要使用同步。
Important: Methods and properties of objects in VCL can only be used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TMyThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end;
 
你没有理解我的问题.再看看.
谢谢
 
这回我看清楚了:-)
form3:=Tform3.create(form3);
~~~~~~
怎么让他自己做自己的Owner呢?一般是用Application,nil也行嘛。
象你的做法在一般程序中大概不会出错,但是总是不大好的。
另外,我还是要提醒你,线程中使用VCL对象,Delphi建议使用Synchronize。
 
tqz create的参数到底是什么作用啊.
delphi就是将好多底层的东西给封了起来,我很想了解了解,怎么入手啊?
台湾的钱达智先生都要出一本这样的书,也不知到出来了没有?

我的问题是想在线程中创建一个窗口!!!
谢谢!!!
我早就发现tqz是一个delphi高手.
 
Form的Create的参数就Owner是Form的所有者呀.Owner在Destroy之前要把他拥有
的所有对象先释放掉,这样就不用手工地逐一释放了。
在这里,可以这样写:
use forms;//要use forms unit才能引用Application
...
procedure Tabc.execute;
var form3:Tform3;
begin

form3:=TForm3.Create(Application);
form3.ShowModal;
form3.Release;
end;
至于研究Delphi我想最好的办法还是看它的源代码。
PS:想夸我可以私下里夸,在这里要被高手们笑话的:)
 
后退
顶部