出错的地方我知道应该用synchronize来解决,可我加了不行,那位帮忙!!  
代码如下:  
unit  reimage;  
 
interface  
 
uses  
   Classes,  Windows,  Messages,  SysUtils,  Variants,  Graphics,  Controls,  Forms,  
   Dialogs,  StdCtrls,  ShDocVW,  ExtCtrls,  jpeg;  
 
type  
   TTreimageForm  =  class(TForm)  
       Image1:  TImage;  
       procedure  FormCreate(Sender:  TObject);  
       procedure  FormShow(Sender:  TObject);  
   private  
 
   public  
 
   end;  
 
var  
   reimageForm:  TreimageForm;  
   phint:string;  
 
implementation  
 
{$R  *.dfm}  procedure  ThreadFunc(P:pointer);stdcall;  
begin  
   phint:='新图片';  
   reimageForm.Image1.Hint:=phint;//这行出错,也就是线程内不能对VCL操作,如何解决??  
end;  
 
procedure  TreimageForm.FormCreate(Sender:  TObject);  
begin  
   Height:=60;  
end;  
 
procedure  TreimageForm.FormShow(Sender:  TObject);  
var  hThread:Thandle;  
       ThreadID:DWord;  
begin  
   hthread:=CreateThread(nil,0,@ThreadFunc,nil,0,ThreadID);  
   if  hThread=0  then  
       messagebox(Handle,'线程出错!',nil,MB_OK);  
end;  
 
end.

解决方案 »

  1.   

    reimageForm.Image1.Hint:=phint;  你创建的时候没有给这个给值吧.//
     
    procedure  TreimageForm.FormShow(Sender:  TObject);  
    var  hThread:Thandle;  
           ThreadID:DWord;  
    begin  
       reimageForm := Self; <<<----------------------------------------//
       hthread:=CreateThread(nil,0,@ThreadFunc,nil,0,ThreadID);  
       if  hThread=0  then  
           messagebox(Handle,'线程出错!',nil,MB_OK);  
    end;
      

  2.   

    这样是可以的, 只是没有考虑线程安全,如果要考虑,就要把
       phint:='新图片';  
       reimageForm.Image1.Hint:=phint;
    独立出一个函数procedure mySetHint()
    begin...end;procedure  ThreadFunc(P:pointer);stdcall;  
    begin  
    synchronize(mySetHint);
    end;
      

  3.   

    别把 CreateThread 放在 OnShow 里,放在 OnCreate 里好了。
      

  4.   

    netfly(支点) :
    第一种方法已实现,我下午回来给你放分,十分感谢!
    另第二种方法:这样是可以的, 只是没有考虑线程安全,如果要考虑,就要把
    独立出一个函数procedure mySetHint()
    begin
       phint:='新图片';  
       reimageForm.Image1.Hint:=phint;
    end;procedure  ThreadFunc(P:pointer);stdcall;  
    begin  
    synchronize(mySetHint);
    end;这个我也是这样写过,可在运行时synchronize(mySetHint);这里报错,不知道什么原因,可以帮我解释一下吗,是否还应该有什么说法?
      

  5.   

    呵呵,应该是编译不过吧. 这个synchronize是在TTHREAD里进行声明的,直接抄他的代码建立一个互斥对象就可以了
      

  6.   

    哈哈,多谢多谢“netfly(支点) ”