Timer コンポーネントを使って、実行時に Shape を動かして見ましょう。Additional ページにある Shape と System ページにあるTimerを貼り付けて下さい。また、Shape の大きさは、65 * 65 にして下さい。下の図のようになりました。またラベルも貼り付けました。
Timer コンポーネントで、Shapeの位置を少しずつ移動させてやります。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
Shape1: TShape;
procedure Timer1Timer(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
Dir: Boolean = True; // 進む方向
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Shape1.Left+65 > Form1.ClientWidth then
begin
Dir := False;
Label1.Caption := '左に進んでます';
end else if Shape1.Left < 0 then
begin
Dir := True;
Label1.Caption := '右に進んでます';
end;
if Dir = True then
Shape1.Left := Shape1.Left + 3
else if Dir = False then
Shape1.Left := Shape1.Left - 3;
end;
end.
Shape の大きさとフォームの座標を利用して、Shape の進行方向を変えています。Timer コンポーネントの Interval プロパティを変えてやると、その分 Shape を早く移動させたり、遅くさせたり出来ます。また、少しちらつきがあるかもしれません。
上のプログラムは以下のようにも書けます。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Shape1.Left+65 > ClientWidth then
begin
Dir := False;
Label1.Caption := '左に進んでます';
end else if Shape1.Left < 0 then
begin
Dir := True;
Label1.Caption := '右に進んでます';
end;
if Dir = True then // if Dir thenでもOKです
Shape1.Left := Shape1.Left + 3
else
Shape1.Left := Shape1.Left - 3;
end;
またShapeには以下のような図形があります。