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には以下のような図形があります。