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!',这是怎么回事呢?
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!',这是怎么回事呢?
设一个端点看看。 TTest = class(TThread)
private
protected
procedure Execute; override;
public
constructor Create; overload; //// 加上他看看
end;你这个代码的问题很多,首先TThread用的有点不地道,其次线程中修改 VCL资源 建议采用 Synchronize 方式。
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.