Możesz wywołać ręcznie wyświetlanie
PopupMenu. Ustawiasz jego właściwość
AutoPopup na
false, a potem wywołujesz gdzieś podając jego położenie względem kursora myszy, np:
- Kod: Zaznacz cały
POINT cP;
GetCursorPos(&cP);
PopupMenu1->Popup(cP.x, cP.y + 100);
Niestety samo nie wyskoczy przy ręcznym wywoływaniu, ale można posłużyć się zdarzeniem
OnMouseUp. Należy brać jednak bezwzględną pozycję kursora, a nie względną, względem formularza lub komponentu, dlatego należy posłużyć się funkcją
GetCursorPos.
Prosty przykład wyświetlania
PopupMenu1 w prawej dolnej pozycji kursora myszy dla formularza:
PopupMenu1 ustawienie właściwości:
Alignment = paRight;
AutoPopup = false;Tworzymy zdarzenie
OnMouseUp dla formularza Form1:
- Kod: Zaznacz cały
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button == mbRight)
{
POINT cP;
GetCursorPos(&cP);
PopupMenu1->Popup(cP.x, cP.y - (PopupMenu1->Items->Count * 19));
}
}
Wartość 19 to standardowa szerokość polecenia PopupMenu.
Co do drugiego pytania, to
patrz serwis Cyfrowy
Baron dział:
porady API Wypełnianie grafiką PopupMenu.