Strona 1 z 1

Popup menu - pozycja wyświetlania oraz ramka

Nowy postNapisane: wtorek, 16 lutego 2010, 18:57
przez Koziol
Witam,
mam pytanie czy istnieje możliwość w jakiś sposób ustawienia pozycji wyświetlania obiektu popupmenu względem lewego dolnego rogu?

W ustawieniach ów obiektu w BCB6 można wybrać prawą środek i lewą stronę w poziomie oraz tylko górę oraz środek względem wysokości, a dolnej części nie da się wybrać.

W jaki sposób zmienić kolorystykę ramki otaczającej ów popupmenu.

Z góry dziękuje za pomoc.

Re: Popup menu - pozycja wyświetlania oraz ramka

Nowy postNapisane: środa, 17 lutego 2010, 11:25
przez Cyfrowy Baron
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.