電子書籍の厳選無料作品が豊富!

void __fastcall TForm1::Timer1Timer(Object* Sender)
{
a=?;
b=?;
c=?;
for (int y= 1; y<4; ++y){
  char z[3][1];
z[1][1]='a';
z[2][1]='b';
z[3][1]='c';
Form1->Image1->Picture->Bitmap->LoadFromResorceName((int)HInstance,"z[y][1]");
}
}
Image1にa→b→cと一秒間隔で順番に画像を出力したいのです。
?の部分に画像イメージを割り当ててforでまわせばいいと思ったのですがどう記述すれば割り当てられるのかが分かりません。
それと、この書き方でImage1に順番に出力できるのでしょうか。教えてください。

A 回答 (3件)

使うコンポーネントはImageが2つとタイマとImageListです。

ImageListには4つのBitmapをセットします。
pno,cx,cyはヘッダーのprivateにint形変数で宣言します。
(例)
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->ClientHeight = 300;
Form1->ClientWidth = 300;
Image1->Left = 0;
Image1->Top = 0;
Image1->Width = 300;
Image1->Height = 300;
Image2->Width = 300;
Image2->Height = 300;
//キャラクタの表示初期番号
pno = 0;
//表示場所
cx = 50;
cy = 20;
//タイマイベント開始
Timer1->Enabled = true;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//キャラクタの番号をカウントする
++pno;
//キャラクタの番号チェック
if(pno >= 4)
pno = 0;
//Image2を更新する
Image2->Canvas->FillRect(Rect(0,0,300,300));
//キャラクタを表示
ImageList1->Draw(Image2->Canvas, cx, cy, pno);
//Image1へコピーする
Image1->Canvas->CopyRect(
Image1->Canvas->ClipRect,
Image2->Canvas,
Image1->Canvas->ClipRect
);
}
    • good
    • 0

表示する画像(Bitmap)の大きさはどれぐらいでしょうか?


64X64ぐらいでしたらTImageListを使えます。
640X480ぐらいでしたら、TImage(3つ)または、TBitmapオブジェクト(3つ)を使えますが。

この回答への補足

返答、遅くなりました。すみません。

画像は64×64です。

補足日時:2007/09/20 10:54
    • good
    • 0

いや、そのコードでは不味いです、かなり(苦笑。


どこがどう不味いのかを一から全部説明するのはめんどくさいので、ご期待のコードの見本を示します。


//image0.bmp, image1.bmp, image2.bmpの3種の画像ファイルをForm1上のImage1に1秒おきに表示する。
//Timer1はIntervalが1秒に設定されているとする。


//Form1のヘッダ内のprivate:以下に
 int image_no; //現在表示されている画像番号を管理
 Graphics::TBitmap* gazou[3];


//From1のコンストラクタ内で
 image_no = 0;
 for ( int n=0; n<3; n++ ) {
  gazou[n] = new Graphics::TBitmap;
  gazou[n]->LoadFromFile( Format( "image%d.bmp", ARRAYOFCONST((n)) ) );
 }
 Image1->Picture->Assign( gazou[0] );


//Form1::Timer1のOnTimerEvent内で
 if ( image_no < 2 )
  ++image_no;
 else
  image_no = 0;
 Image1->Picture->Assign( gazou[image_no] );


//Form1のデストラクタないしOnDestroyイベント内で
 for ( int n=0; n<3; n++ )
  delete gazou[n]; //後始末を忘れない

以上です。
VCLのFormatはちょっと使い方に癖のあるメソッドなので、よく判らなくても気にしないでください。なんかしらんけどこうやって使うんだな、で覚えといてください。

それより画像ファイルの読み込みと、それをTImageに表示する手順を飲み込みましょう。

あと、image_no、gazou[]をForm1のメンバにしているのがなぜか判りますか?
これが判らないようでしたら、C++の入門書を1冊きちんと仕上げることをお勧めします。
Borland C++ BuilderはC++の開発環境としては非常に敷居の低いものですが、さすがにC++の基本が判ってないと使えませんよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!