我 想在 form 上显示 不同的 数据在刷新 ,不知道问题在哪?求帮助代码 如下:
unit Unit10;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
//FCriticalSection
TMyThreadEvent =procedure of object;
//procedure (Acanvas :Tcanvas;const Atext:String) of object;
TMyThread=class(Tthread)
procedure Execute;override;
procedure DoDrawInfo;
private
FMyThreadEvent: TMyThreadEvent;
published
public
// FForm:TForm10;
property MyThreadEvent:TMyThreadEvent read FMyThreadEvent write FMyThreadEvent;
end; TForm10 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FTextThread:TMythread;
FDateTimeThread:TMythread;
procedure WMPaint(var Message: TMessage); message WM_PAINT;
public
{ Public declarations }
procedure settext;
procedure showDatetime; end;
var
Form10: TForm10;implementation{$R *.dfm}procedure TForm10.FormCreate(Sender: TObject);
begin
FTextThread:=TMythread.Create(true);
FTextThread.MyThreadEvent:=self.settext; FDateTimeThread:=TMythread.Create(true);
FDateTimeThread.MyThreadEvent:=self.showDatetime;
end;procedure TForm10.FormDestroy(Sender: TObject);
begin
freeandnil(FTextThread);
freeandnil(FDateTimeThread);
end;procedure TForm10.settext;
var
i:integer;
begin
i:=0;
// FDateTimeThread:TMythread;
while i<1000000 do
begin
inc(i);
self.Canvas.Lock;
self.Canvas.TextOut(20,100,inttostr(i));
self.Canvas.Unlock;
end;
end;procedure TForm10.showDatetime;
var time:string;
begin
time:=formatdatetime('YYMMDD HH:MM:SS',NOw());
self.Canvas.Lock;
self.Canvas.TextOut(20,20,time);
self.Canvas.Unlock;
end;procedure TForm10.WMPaint(var Message: TMessage);
begin
FTextThread.Execute;
FDateTimeThread.Execute;
end;{ TMyThread }procedure TMyThread.DoDrawInfo;
begin
if assigned(FMyThreadEvent) then
begin
FMyThreadEvent();
end;
end;procedure TMyThread.Execute;
begin
inherited;
Synchronize(DoDrawInfo);end;end.不知道 线程 还是要等第一个 执行 完成了 ,第二个 才 执行!
求解决方案!
unit Unit10;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
//FCriticalSection
TMyThreadEvent =procedure of object;
//procedure (Acanvas :Tcanvas;const Atext:String) of object;
TMyThread=class(Tthread)
procedure Execute;override;
procedure DoDrawInfo;
private
FMyThreadEvent: TMyThreadEvent;
published
public
// FForm:TForm10;
property MyThreadEvent:TMyThreadEvent read FMyThreadEvent write FMyThreadEvent;
end; TForm10 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FTextThread:TMythread;
FDateTimeThread:TMythread;
procedure WMPaint(var Message: TMessage); message WM_PAINT;
public
{ Public declarations }
procedure settext;
procedure showDatetime; end;
var
Form10: TForm10;implementation{$R *.dfm}procedure TForm10.FormCreate(Sender: TObject);
begin
FTextThread:=TMythread.Create(true);
FTextThread.MyThreadEvent:=self.settext; FDateTimeThread:=TMythread.Create(true);
FDateTimeThread.MyThreadEvent:=self.showDatetime;
end;procedure TForm10.FormDestroy(Sender: TObject);
begin
freeandnil(FTextThread);
freeandnil(FDateTimeThread);
end;procedure TForm10.settext;
var
i:integer;
begin
i:=0;
// FDateTimeThread:TMythread;
while i<1000000 do
begin
inc(i);
self.Canvas.Lock;
self.Canvas.TextOut(20,100,inttostr(i));
self.Canvas.Unlock;
end;
end;procedure TForm10.showDatetime;
var time:string;
begin
time:=formatdatetime('YYMMDD HH:MM:SS',NOw());
self.Canvas.Lock;
self.Canvas.TextOut(20,20,time);
self.Canvas.Unlock;
end;procedure TForm10.WMPaint(var Message: TMessage);
begin
FTextThread.Execute;
FDateTimeThread.Execute;
end;{ TMyThread }procedure TMyThread.DoDrawInfo;
begin
if assigned(FMyThreadEvent) then
begin
FMyThreadEvent();
end;
end;procedure TMyThread.Execute;
begin
inherited;
Synchronize(DoDrawInfo);end;end.不知道 线程 还是要等第一个 执行 完成了 ,第二个 才 执行!
求解决方案!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货