• ベストアンサー

Borland C++ Builder

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に順番に出力できるのでしょうか。教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • 64ema
  • ベストアンサー率44% (4/9)
回答No.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 ); }

その他の回答 (2)

  • 64ema
  • ベストアンサー率44% (4/9)
回答No.2

表示する画像(Bitmap)の大きさはどれぐらいでしょうか? 64X64ぐらいでしたらTImageListを使えます。 640X480ぐらいでしたら、TImage(3つ)または、TBitmapオブジェクト(3つ)を使えますが。

roki321
質問者

補足

返答、遅くなりました。すみません。 画像は64×64です。

  • KoHal
  • ベストアンサー率60% (110/181)
回答No.1

いや、そのコードでは不味いです、かなり(苦笑。 どこがどう不味いのかを一から全部説明するのはめんどくさいので、ご期待のコードの見本を示します。 //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++の基本が判ってないと使えませんよ。