Ne mogu da se setim da li postoji neki lepši/prirodniji način da se obavi identifikovanje kontrole iz koje je pozvan taj PopupMenu (jer se Sender u funkciji odnosi na TMenuItem objekat), ali evo jedno rešenje koje bi trebalo da radi.
Recimo da imaš jedan
TPopupMenu (PopupMenu1) i nekoliko stavki
TMenuItem (MenuItem1, MenuItem2, ...) i da imaš dva
TBitBtn (BitBtn1 i BitBtn2). BitBtn1 i BitBtn2 su povezani sa PopupMenu1 preko
TBitBtn::PopupMenu. Dakle, dva tastera pokazuju na isti popup meni.
Kada klikneš na recimo prvu stavku popup menija (ti si dinamički napravio i dodelio kod) hoćeš da znaš koji taster (BitBtn1 ili BitBtn2) je pozvao tu stavku menija.
Ideja je da se iskoristi
TBitBtn::OnBitBtnContextPopup događaj:
--- H ---
Code:
// ...
AnsiString KojiBitBtn;
// ...
Zatim napraviš ZAJEDNIČKI OnBitBtnContexPopup događaj. Selektuješ sve BitBtn koje želiš da uključiš u proveru, zatim klikneš na Events, klikneš na OnBitBtnContexPopup događaj i dodaš kod. Možeš i da preimenuješ u ObjectInspectoru naziv događaja da sugeriše da se radi o zajedničkom.
--- CPP ---
Code:
// ...
void __fastcall TForm1::ZajednickiBitBtnContextPopup(TObject *Sender,
TPoint &MousePos, bool &Handled)
{
KojiBitBtn = (dynamic_cast <TBitBtn *> (Sender))->Caption;
}
// ...
Kod neke stavke samog menija:
Code:
void __fastcall TForm1::DogadjajZaStavkuJedanPopupMenija(TObject *Sender)
{
// ...
// koja stavka
TMenuItem *MenuItem = dynamic_cast <TMenuItem*> (Sender);
if ( MenuItem )
ShowMessage( MenuItem->Caption );
// koji bitbtn
ShowMessage( KojiBitBtn );
// ...
}
P.S.
Ovaj deo koda mozes malo i da zategnes, radi svake eventualnosti:
Code:
// ...
void __fastcall TForm1::ZajednickiBitBtnContextPopup(TObject *Sender,
TPoint &MousePos, bool &Handled)
{
TBitBtn *BitBtn = dynamic_cast <TBitBtn*> (Sender);
if ( BitBtn )
KojiBitBtn = BitBtn->Caption;
}
// ...