unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end; TTest = class(TThread)
  private
  protected
    procedure Execute; override;
  public
    constructor Create;
  end;
var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
  test : Ttest;
begin
  test := Ttest.Create ;
end;constructor Ttest.create;
begin
  FreeOnTerminate := true;
  inherited Create(false);
end;procedure Ttest.Execute;
begin
  form1.Caption := 'hello!'
end;
end.现在的问题是按下button1后form1的标题变成空而不是'hello!',这是怎么回事呢?

解决方案 »

  1.   

    你要确信你的procedure Ttest.Execute;执行了。
    设一个端点看看。 TTest = class(TThread)
      private
      protected
        procedure Execute; override;
      public
        constructor Create;   overload; //// 加上他看看
      end;你这个代码的问题很多,首先TThread用的有点不地道,其次线程中修改 VCL资源 建议采用 Synchronize 方式。
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        //Label1: TLabel;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end; TTest = class(TThread)
      private
        procedure changeformcaption;
      protected
        procedure Execute; override;
      public
        constructor Create;
      end;
    var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      test : Ttest;
    begin
      test := Ttest.Create ;
    end;constructor Ttest.create;
    begin
      FreeOnTerminate := true;
      inherited Create(false);
    end;procedure Ttest.Execute;
    begin
      Synchronize(changeformcaption)
    end;procedure ttest.changeformcaption;
    begin
      form1.Caption := 'hello!'
    end;
    end.