Mam pewien problem, stosuję procedurę PtInRect jednak po wyświetleniu okna modalnego i jego zamknieciu coś się sypie z tym PtInRect poniżej troszkę kodu i opis:
procedure TFrameMagazyn.SelectMenu_MagazynMouseLeave(Sender: TObject);
var
R : TRect;
begin
GetWindowRect(SelectMenu_Magazyn.Handle, R);
if not PtInRect(R, Mouse.CursorPos) then ShowSelectMenu_Magazyn(False);
end;
procedure TFrameMagazyn.SelectMenuButton_MagazynMouseEnter(
Sender: TObject);
begin
ShowSelectMenu_Magazyn(True);
end;
{Pokazuje i ukrywa zakładkę SelectMenu_Magazyn}
procedure TFrameMagazyn.ShowSelectMenu_Magazyn(AVisible: boolean);
begin
SendMessage(Self.Handle, WM_SETREDRAW, 0, 0);
SelectMenu_Magazyn.Left := SelectMenuButton_Magazyn.Left;
SelectMenuButton_Magazyn.Visible := not AVisible;
SelectMenu_Magazyn.Visible := AVisible;
SendMessage(Self.Handle, WM_SETREDRAW, 1, 0);
RedrawWindow(Self.Handle, nil, 0, RDW_ALLCHILDREN or RDW_ERASE or RDW_INVALIDATE);
Self.Repaint;
end;
Opis działania: jak najadę myszką na button (SelectMenuButton_Magazyn) to pokazuje się panel (SelectMenu_Magazyn) jak opuszczę panel to ukrywa się i zostaje button.
Generalnie wszystko działa z małym wyjątkiem. jak wyświetli się panel i wywołam jakieś okno modalne np showmessage to po zamknięciu panel jest widoczny (nie wykrywa wyjścia myszki poza panel - ok to rozumiem dlaczego tak się dzieje, ale jak najadę myszką na panel i wyjdę z jego obszaru to procedura MouseLeave / PInRect powinna zadziałać a tak się nie dzieje może tylko 2 razy zadziałała. Natomiast jak panel jest widoczny i wywołam taką sekwencję to wszystko wraca do normy, tak mi się wydaje:
SendMessage(Self.Handle, WM_SETREDRAW, 0, 0);
SendMessage(Self.Handle, WM_SETREDRAW, 1, 0);
RedrawWindow(Self.Handle, nil, 0, RDW_ALLCHILDREN or RDW_ERASE or RDW_INVALIDATE);
Co robię źle?