Lewy przycisk myszy i PopupMenu

dział ogólny

Lewy przycisk myszy i PopupMenu

Nowy postprzez Michal-S2 » Å›roda, 8 października 2008, 16:09

Jeśli połączę jakiś komponent z PopupMenu to po naciśnięciu prawego przycisku myszy otwiera się menu. Jak zrobić żeby zamiast prawego przycisku trzeba było naciskać lewy?
Najgorsze nieszczęścia w historii były spowodowane przez idealistów próbujących zmuszać ludzi do tego, "co dla nich dobre"
Bjarne Stroustrup - twórca c++
Avatar użytkownika
Michal-S2
Intelektryk
Intelektryk
 
Posty: 148
Dołączył(a): sobota, 19 lipca 2008, 13:03
Lokalizacja: Gdańsk
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows 7 Professional OEM 64bit
Kompilator: Turbo C++ Explorer
    NieznanyNieznana

Re: Lewy przycisk myszy i PopupMenu

Nowy postprzez Cyfrowy Baron » czwartek, 9 października 2008, 10:07

Trzeba to realizować za pomocą kodu, ale jeżeli chcesz żeby popup pojawiał się tylko po kliknięciu lewym klawiszem myszy, to musisz ustawić właściwość AutoPopup obiektu PopupMenu na false w ten sposób menu nie będzie wyskakiwać automatycznie po wciśnięciu prawego klawisza myszy.

Kolejna sprawa to nie da się tutaj połączyć PopopMenu z obiektem poprzez jego właściwość PopupMenu, czyli jeżeli we właściwości Formularza np. Form1 -> PopupMenu wybierzesz swoje PopupMenu1 to połączenie nic nie da w przypadku wywoływania tego menu poprzez kod. W takiej sytuacji trzeba wywoływać menu w zdarzeniu OnMouseUp obiektu z którym chcemy to menu połączyć. Koordynaty pozycji PopupMenu są określane względem pulpitu a nie względem okna programu, dlatego trzeba uwzględnić położenie okna na pulpicie oraz szerokość belki tytułowej okna:


Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
   __int8 x = GetSystemMetrics(SM_CYSIZE);

   if(Button == mbLeft) PopupMenu1->Popup(Left + X, Top + Y + x);
}
//---------------------------------------------------------------------------


W podanym przykładzie PopupMenu1 zostanie wywołane po kliknięciu lewym klawiszem myszy na Formularzu Form1.



Jeżeli nie chcesz powtarzać kodu w zdarzeniu OnMouseUp dla każdego obiektu w którym ma być ono wywoływane, to sugeruję przeczytać artykuł w serwisie Cyfrowy Baron w dziale: teoria -> rzutowanie typów, przypisanie polimorficzne.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Lewy przycisk myszy i PopupMenu

Nowy postprzez Michal-S2 » piÄ…tek, 10 października 2008, 09:06

Dzięki, własnie o to mi chodziło ;)
Najgorsze nieszczęścia w historii były spowodowane przez idealistów próbujących zmuszać ludzi do tego, "co dla nich dobre"
Bjarne Stroustrup - twórca c++
Avatar użytkownika
Michal-S2
Intelektryk
Intelektryk
 
Posty: 148
Dołączył(a): sobota, 19 lipca 2008, 13:03
Lokalizacja: Gdańsk
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows 7 Professional OEM 64bit
Kompilator: Turbo C++ Explorer
    NieznanyNieznana


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości

cron