動的に作成したコンポーネントの順番をOnClickイベントで判定するには

元ネタ:動的に作った複数イメージでの onclick イベント – C++ Builder / Turbo C++ 質問の木

C++Builderで動的に作成したコンポーネントのイベントから、どのコンポーネントのイベントかを判定する方法を説明します。

質問

動的に作成したコンポーネントの順番をOnClickイベントで判定するには

答え

Tagプロパティに判定用の数値を設定します。

サンプルプログラム

動的に作成されたImageコンポーネントがクリックされたときにTagプロパティの値を表示します。

001

002

あらかじめ、C:\imageにサンプル画像(0.gif~5.gif)を用意します。

__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  for (int i = 0; i < 5; ++i)
  {
    TImage* image = new TImage(this);
    image->Parent = this;
    //OnClickイベントを割り当てる
    image->OnClick = this->OnImageClick;
    //Tagプロパティを設定する
    image->Tag = i;
    //画像ファイルを読み込む
    image->Picture->LoadFromFile(Format(L"C:\\image\\%d.gif", ARRAYOFCONST((i))));
    //Imageコンポーネントを配置する
    image->Left = 0;
    image->Top = i * 20;
  }
}
void __fastcall TForm1::OnImageClick(TObject *Sender)
{
  //クリックされたImageコンポーネントのTagプロパティを表示する
  TImage* image = dynamic_cast<TImage*>(Sender);
  ShowMessage(IntToStr(image->Tag));
}

コメント

  1. 有用な情報を掲載いただき、いつも大変に助けられております。ありがとうございます。

    お答えいただけるかどうかわからないのですが、調べた範囲ではわからなかったので、質問させていただければと存じます。

    記事を参考にさせていただき、Viewport3D上の動的コンポーネントにOnClickイベントを割り付けることは実現できました。しかし、
    1)右ボタンと左ボタンを区別する方法、
    2)OnMoveのような、当該コンポーネントの上をマウスが動いたときにinvokeする方法、
    がわかりませんでした。まことに厚かましいお願いであることは重々承知しておりますが、どうかご教授いただくようお願い申し上げます。

    山岡

  2. 山岡さん
    長らくC++Builderから離れていて、C++Builderを動かす環境もありません。
    申し訳ないのですが、C++Builderの質問についての回答はできません。
    ご了承ください。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください