コラム / テトリスぽいもの / 9



前スレでブロックを描いてくれた人がいたので、
それを使います。

fileblock.bmp

↑
これを 名前をつけて保存して、
プロジェクトフォルダにいれといてください。
そしたら、
Form1のpublic変数に、
b_img という TBitmapを追加します。
 public
   { Public 宣言 }
   BackScreen:TBitmap;
   b_img:TBitmap;
 end;
そして、フォームのonCreate,onCloseを編集します。
procedure TForm1.FormCreate(Sender: TObject);
begin
   BackScreen:=TBitmap.Create;
   BackScreen.Width:=150;
   BackScreen.Height:=300;
   BackScreen.Canvas.Brush.Style:=bsSolid;
   BackScreen.Canvas.Pen.Style:=psSolid;
   BackScreen.Canvas.Pen.Mode:=pmCopy;

   b_img:=TBitmap.Create;
   b_img.LoadFromFile(
       ExtractFilePath(Application.ExeName)+'block.bmp'
   );
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   b_img.Free;
   BackScreen.Free;
end;
b_img周りですね。
CreateとFreeの部分はわかると思います。
LoadFromFileは、引数として渡されたパスのファイルをロードします。
TBitmapなのでbmpはサポートしてます。
さて、そのファイルパス文字列ですが、
ExtractFilePath(Application.ExeName)+'block.bmp'
ExtractFilePath() というのは、ファイルのパスから、
最後のファイル部分を抜いた文字列を返します。
たとえば,ExtractFilePath( '"c:\windows\Win.ini'" ) は '"c:\windows\'" を返します。
↑ヘルプより
で、Application.Exenameですが、
ApplicationはTApplication型のクラスで、
Exenameプロパティーは実行ファイルのパス名を返します。
c:\windows\project1.exe
を実行しているなら、
c:\windows\project1.exe
を返すわけです。
で、それがExtarctFilePathに入ると、
c:\windows\
になります。
その後ろに、
+'block.bmp'
がついているので、
プロジェクトフォルダ\block.bmp
が指定できるというわけです。
実はこれ、
block.bmp だけでも動きます。
フルパスじゃなくてもいい人は
    b_img.LoadFromFile(
      'block.bmp'
   );
でいいです。
ブロックの画像が扱えるようになったので、
次回で画像をフィールドに転送する手続きを作りましょう。