元ネタ:動的に作った複数イメージでの onclick イベント – C++ Builder / Turbo C++ 質問の木
C++Builderで動的に作成したコンポーネントのイベントから、どのコンポーネントのイベントかを判定する方法を説明します。
質問
動的に作成したコンポーネントの順番をOnClickイベントで判定するには
答え
Tagプロパティに判定用の数値を設定します。
サンプルプログラム
動的に作成されたImageコンポーネントがクリックされたときにTagプロパティの値を表示します。
あらかじめ、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));
}
有用な情報を掲載いただき、いつも大変に助けられております。ありがとうございます。
お答えいただけるかどうかわからないのですが、調べた範囲ではわからなかったので、質問させていただければと存じます。
記事を参考にさせていただき、Viewport3D上の動的コンポーネントにOnClickイベントを割り付けることは実現できました。しかし、
1)右ボタンと左ボタンを区別する方法、
2)OnMoveのような、当該コンポーネントの上をマウスが動いたときにinvokeする方法、
がわかりませんでした。まことに厚かましいお願いであることは重々承知しておりますが、どうかご教授いただくようお願い申し上げます。
山岡
山岡さん
長らくC++Builderから離れていて、C++Builderを動かす環境もありません。
申し訳ないのですが、C++Builderの質問についての回答はできません。
ご了承ください。
そうでしたか。お手数をおかけしました。