Shape を動かそう

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


up next
Last update: 2002/4/14