unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit2, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
UpDown1: TUpDown;
UpDown2: TUpDown;
UpDown3: TUpDown;
Button1: TButton;
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure CheckBox3Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Edit3Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
Ball1, Ball2, Ball3: TSquareThread;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
这里为什么不引用
{$R *.dfm}
//第1 个线程(红色)
procedure TForm1.CheckBox1Click(Sender: TObject);
var
X,Y:Integer;
begin
if (CheckBox1.Checked)=True then
begin
X:=160; //移动范围x 坐标的左边界
Y:=CheckBox1.Top+CheckBox1.Height div 2; //y 坐标
Edit1.Text:=’2’;
Ball1:=TSquareThread.Create(clRed,X,Y); //创建线程
Ball1.Resume; //唤醒该线程
end
else
Ball1.Terminate; //结束该线程
Edit1.OnChange(Sender);
end;
....................................................
unit Unit2;
interface
uses
Classes,Graphics; //引用Graphics 单元
type
TSquareThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
procedure Paint; //在窗体中画正方形
Public
X1,Y,X2,Step:Integer; //正方形的新、旧位置和变化的步长
EColor:TColor; //正方形的颜色
Constructor Create(Col:TColor;XPos,YPos:Integer); //构造函数
end;
implementation
uses Unit1;
procedure TSquareThread.Paint;
begin
//使用窗体的颜色在原来地方画一个正方形
Form1.Canvas.Pen.Color:=Form1.Color;
Form1.Canvas.Brush.Color:=Form1.Color;
Form1.Canvas.Rectangle(X1-10,Y-10,X1+10,Y+10);
//使用窗体的颜色在原来地方画一个正方形
Form1.Canvas.Pen.Color:=EColor;
Form1.Canvas.Brush.Color:=EColor;
Form1.Canvas.Rectangle(X2-10, Y-10, X2+10, Y+10);
end;
constructor TSquareThread.Create (Col: TColor; XPos, YPos: Integer);
begin
EColor:=Col; //颜色
X2:=XPos; //x 坐标
X1:=X2;
Y:=YPos; //y 坐标
Inherited Create (True);
end;
procedure TSquareThread.Execute;
begin
Step:=1; //步长
Repeat
X1:=X2;
X2:=X2+Step; //改变x 坐标位置
if X2<160 then
Step:=1 //到了左边
Else if X2>(Form1.ClientWidth-15) then
Step:=-1; //到了右边
Synchronize(Paint);
Until Terminated;
end;