※ ChatGPTを利用し、要約された質問です(原文:bmpやImageの配列を関数の引数で渡す)
C++BuilderXE2starterでbmpやImageの配列を引数に渡す方法
このQ&Aのポイント
C++BuilderXE2starterでビットマップ(bmp)やTImageを配列で定義し、関数の引数として渡す方法を教えてください。
bmpやImageを配列で定義し、関数の引数として渡すことができます。以下は正しい使い方の例です。
最終的にやりたいスタイルを実現するために、bmpとImageの配列のサイズと位置を設定し、関数を呼び出すことで描画することができます。
C++BuilderXE2starterです。
ビットマップ(bmp)やTImage を配列で定義し、関数の引数として渡したいのですが
よくわからないまま、次のようにすると、色んな不正な使い方らしきエラーとなります。
正しい使い方を教えてください。
なお配列でないbmpを渡すことはできます。ImageはIDEで定義するのではなく、プログラムから生成させる積もりです。
最終的にやりたいスタイル。
void __fastcall TForm1::onclick(TObject *Sender)
{
int n;
Graphics::TBitmap *bmp[10];
TImage::Image *Imagenum[10];
for(n=0;n<10;n++){
bmp[n]=new Graphics::TBitmap();
Imagenum[n]=new TImage::TImage;
// bmp,Imagenum のサイズ位置の設定
Imagenum[n]->Top= 値;
Imagenum[n]->Left= 値;
}
sub(bmp,Imagenum);
Free(bmp); // for でまわす要あり?
Free(Image);
}
//---------------------------------------------------------------------------
void TForm1::sub2(Graphics::TBitmap *bmp[], TImage *Imagenum[])
{
Image[0]->Canvas->Draw(0,0,bmp[0]);
Image[1]->Canvas->Draw(0,0,bmp[1]);
}
unit.h
class TForm1 : public TForm
{
__published: // IDE で管理されるコンポーネント
TButton *Button1;
void __fastcall onclick(TObject *Sender);
private: // ユーザー宣言
void TForm1::sub(Graphics::TBitmap **bmp, TImage **Image);
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
お礼
T.yamamoto様(お世話になっている方のイニシアルに覚えがありますが・・)ご返事ありがとうございます。 書き方はわかりました。意味も大体わかりました。 記法のバラエティとして以下を確認しました。 ・image[i] = new TImage(this);→image[i] = new TImage(Form1); 前者の方が一般的なのですね。 ・void sub2(TBitmap* bmp[10], TImage* image[10]) → void sub2(TBitmap** bmp, TImage** image) 同じならば、前者の方が実体をよくあらわしているのでベターですね。 理屈は体で(指で?)覚えていないので、すぐ忘れてしまいます。できるだけ忘れない方法でメモしておきます。 他 std::array はスマートポインタですね。触手のでる良い点もありますがどうも新しいことにはなかなかなじめません。 Fotranの添え字チェックにもあたりますね。 image[n]の使い方のご提示で、規則的配置とも限らないのですが、参考になります。
補足
あと、忘れました。 Delete Image[n]がなくても良い点が疑問です。