- ベストアンサー
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に順番に出力できるのでしょうか。教えてください。
- みんなの回答 (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)
表示する画像(Bitmap)の大きさはどれぐらいでしょうか? 64X64ぐらいでしたらTImageListを使えます。 640X480ぐらいでしたら、TImage(3つ)または、TBitmapオブジェクト(3つ)を使えますが。
- KoHal
- ベストアンサー率60% (110/181)
いや、そのコードでは不味いです、かなり(苦笑。 どこがどう不味いのかを一から全部説明するのはめんどくさいので、ご期待のコードの見本を示します。 //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++の基本が判ってないと使えませんよ。
補足
返答、遅くなりました。すみません。 画像は64×64です。