Problem z Z-order

0

Mam nastepujacy problem:

chce, zeby moja forma byla na wierzchu
wiec dalem FormStyle:=fsStayOnTop

Ale chcialem, zeby nie przykrywal jej TaskBar
wiec do Timera ktory i tak tam jest co 1 s, dalem:
SetWindowPos(Form1.Handle, HWND_TOP, 0,0,0,0,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
I teraz nawet jak taskbar przykryje forme, to ona wyskakuje.

Ale forma ma PopupMenu i jesli sie to PopupMenu otworzy, to powyzsze SetwindowPos powoduje, ze forma przykrywa wlasne PopupMenu, co jest bez sensu.

Jak sobie z tym poradzic?

Myslalem, zeby ustawiac globalna zmienna gdy jest wlaczone POpupMenu i wtedy blokowac SetWindowPos. Ale umiem wykryc pojawienie sie menu (OnPopup) ale nie jego schowanie.

Moze jakies inne sugestie?

0

gdy user klika w menuitema popup automatycznie znika, powinno pomóc

0

gdy user klika w menuitema popup automatycznie znika, powinno pomóc

Taki sobie pomysł. Gdy user klika gdzie indziej, menu tez znika.

0

gdy user klika w menuitema popup automatycznie znika, powinno pomóc

Probowalem wykryc zamkniecie popupa ale znika on w wielu innych sytuacjach (np nacisniecie Esc, klikniecie w zupelnie inne okno) i oprogramowanie ich wszystkich jest cokolwiek pozbawione sensu...

Ale wlasnie wpadlem na banalnie proste rozwiazanie.
Kiedy jest wyswietlony popup wtedy moja forma ma focus i jest ForegroundWindow wiec wystarczy uzaleznic setwindowpos od tego co jest foregroundwindow:

if GetForegroundWindowForm1.Handle then
SetWindowPos(Form1.Handle, HWND_TOP, 0,0,0,0,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);

Kiedy jest wyswietlony popup wtedy moja forma ma focus i jest ForegroundWindow wiec wystarczy uzaleznic setwindowpos od tego co jest foregroundwindow.

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