M mayi Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-29 #1 我在线程中动态建立了几个Label,用于显示一些信息,但我用showmessage(Label1.caption)时,程序 出错了,不知我错在什么地方?请指教!
C cheka Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-29 #2 动态建立的Label在showmessage所在的程序段中有效么? 也就是说,如果你的Label是在线程中声明的,而在另一个函数中ShowMessage, 那样就会出错,除非你将它们定义成全局变量
M mayi Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-29 #3 to cheka: Label是在线程运行时有效,但在showmessage过程中无效,出错! 定义成全局变量就可以了吗?但我如何得到这个Label呢?比如说,我在线程里动态建立了5 个Label,等线程运行结束后,我想显示这5个Label的结果,可以直接用showmessage(label1.caption) 吗?请用例子告之!
to cheka: Label是在线程运行时有效,但在showmessage过程中无效,出错! 定义成全局变量就可以了吗?但我如何得到这个Label呢?比如说,我在线程里动态建立了5 个Label,等线程运行结束后,我想显示这5个Label的结果,可以直接用showmessage(label1.caption) 吗?请用例子告之!
L lczhuohuo Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-29 #4 你动态建立的Label的名字就不是Label1,2,3,4,5了,那是在设计窗体的时候, form designer自动加上去的。可以有很多的办法的,可以用一个数组记录下来啊。
T tanglu Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-29 #5 你的线程是不是设成了FreeOnTerminate := True?那么当线程释放时, 所有在线程类中声明的Label都已经释放了,当然就不能再去访问了。 你可以在线程中ShowMessage(Label1.Caption)。或者采用一个全局的TThreadList链表 来存放线程执行中产生的信息,最后将之显示就可以了。
你的线程是不是设成了FreeOnTerminate := True?那么当线程释放时, 所有在线程类中声明的Label都已经释放了,当然就不能再去访问了。 你可以在线程中ShowMessage(Label1.Caption)。或者采用一个全局的TThreadList链表 来存放线程执行中产生的信息,最后将之显示就可以了。
W wjing Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-25 #6 可以先申请全局的变量S:TSTRINGLIST,并在窗口的CREATE事件中初始化 S:=TSTRINGLIST.CREATE,这样就可以保存在线程生成的Label1.Caption信息, S.ADD(Label1.Caption).
可以先申请全局的变量S:TSTRINGLIST,并在窗口的CREATE事件中初始化 S:=TSTRINGLIST.CREATE,这样就可以保存在线程生成的Label1.Caption信息, S.ADD(Label1.Caption).
Z zeroworld Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-25 #7 Delphi不允许线程访问任何窗口中的可视控件,因此必须通过程序主线程访问。 虽说vcl提供了简化多线程操作的类,但只是工作者线 程(worker threads)使用起来比较简单。如果线程要和界面打交道的话事情就变得麻烦 了,因为除了应用程序的主线程,任何线程不能访问任何可视的vcl部件。你不得不使用 synchronize方法等待主线程处理它的消息,然后在主线程中访问vcl部件
Delphi不允许线程访问任何窗口中的可视控件,因此必须通过程序主线程访问。 虽说vcl提供了简化多线程操作的类,但只是工作者线 程(worker threads)使用起来比较简单。如果线程要和界面打交道的话事情就变得麻烦 了,因为除了应用程序的主线程,任何线程不能访问任何可视的vcl部件。你不得不使用 synchronize方法等待主线程处理它的消息,然后在主线程中访问vcl部件