如题,希望高手指导一下在下。我又Tlabel派生一个类,在类中产生一个线程,这个线程的任务就是不断改变TLabel本身的字体颜色。但是线程中访问不到类本身的数据?请问如何做?

解决方案 »

  1.   

    可以把创建者(类的实例对象)的指针传给线程的吧不过,线程直接修改vcl界面可能不行
      

  2.   

    请问如何做一个可以自己改变字体颜色的类?我希望用 TLabel 这个类。本来想向它发送定时器消息,发现没有窗口句柄,所以就想到用线程去改变,但是访问不到Tlabel的数据。
      

  3.   

    你的“在类中产生一个线程”的代码是怎么样的,看看能不能传入label的地址进去“一个可以自己改变字体颜色的类”,它提供一个改变函数,由它的owner(form)里的定时器去调用,不是很简单吗?
    否则,摆n个这样的label,就会起n个线程?
      

  4.   

    VCL控件对线程不够安全,不建议你那么做。
    想改颜色直接在窗口里的定时器里改不就可以了。
      

  5.   

    我还是希望通过这种方式实现,不相信做不到的。不想繁忙的主窗口再去管理这些杂七杂八的事情。即使是利用定时器,我也希望能由控件自己去产生,自己去接受并处理。我曾经尝试使用TStaticText,但是发现在delphi2009下面它改变不了字体颜色。所以还是想用TLabel了。
      

  6.   

    VCL控件里使用线程,每创建一个对象就会新开一个线程,不合适
      

  7.   

    自己终于解决这个问题了,使用TThread可以!自定义类中包含一个由TThread派生的TMyThread成员,然后把自身地址当作参数传到TMyThread对象中。在Execute方法中将自身的地址转换为类后再修改Font.Color就OK了。但是奇怪的是直接通过BeginThread产生的线程却无法访问!!!看来在VCL环境下还是要使用原汁原味的VCL对象解决所有问题啊!