zamykanie PopupMenu otwartego z TrayIcon'a

0

Jest tak, mam TrayIcon i PopupMenu. PopupMenu wywołuje w ten sposób :

void __fastcall TForm1::TrayIcon1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if(Button == mbRight)
    PopupMenu1->Popup(Mouse->CursorPos.x,Mouse->CursorPos.y) ;
}

Teraz jest taki problem, że jak wywołam te menu to nie można go zamknąć, tzn., pykanie myszką w pulpit nic nie powoduje, menu się nie zamyka. Czy należy przechwycić jakiś komunikat o tym, że klikamy myszką w innym miejscu niż na menu i wtedy trzeba je zamknąć ? Jak to zrobić ?

0

Przed wyświetleniem popupa należy 'wysunąć' swoje okno na wierzch - SetForegroundWindow(m_hwnd). Nie ważne, że okno nie jest widoczne, ważne jest by ono miało fokus, wtedy każdy klik myszy zostanie wysłany do tego właśnie okna.

Zauważ że jakikolwiek klik w trayu zostaje przechwycony przez shella i to on automatycznie dostaje fokus. Nagle pojawia się menu, user klika sobie na pulpit, system wysyła powiadomienie do aktywnego okna by usunął menu, a w tej chwili fokus ma shell który ignoruje powiadomienie bo przecież to nie on wyświetlił menu.
Ot, taki mały bug, ktoś założył że właścicielem menu zawsze jest aktywne okno.

0

Wieelkie dzięki, sapero Nawet nie wiesz jak mi pomogłeś.

0

ja też, bardzo dziękuje!
akurat nad tym siedzię :)

0

Kurde balans, dzięki za pomoc!!!

Tyle czasu się z tym męczyłem, jak zamknąć menu popup w tray'u, ciągle zostawało na wierzchu. Kombinowałem [glowa] ale to nic to nie dawało..., kto by na to wpadł, że chodzi o wysnięcie okna. Co prawda siedze w Delphi nie w C+, ale owa linijka "SetForegroundWindow(Form1.Handle)" naprawiła problem [diabel] - jak mawiają diabeł tkwi w szczegółach.

Dzięki Sapero - rozminowałeś problem :)

[browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1