In der
VCL habe ich das mal so gelöst:
Delphi-Quellcode:
procedure TodPanelCourt.CMMouseEnter(
var Message: TMessage);
begin
inherited;
if not odExist(odCourt)
then
Exit;
if not odPanelGame.Visible
then
Exit;
BitBtnCancel.Visible := True;
BitBtnCancel.Left := Width - BitBtnCancel.Width;
BitBtnCancel.Top := 0;
end;
procedure TodPanelCourt.CMMouseLeave(
var Message: TMessage);
var
pt: TPoint;
H: hwnd;
begin
inherited;
if not odExist(odCourt)
then
Exit;
GetCursorPos(pt);
H := WindowFromPoint(pt);
if (H =
Handle)
or (H = BitBtnCancel.Handle)
then
Exit;
BitBtnCancel.Visible := False;
end;
Funktioniert meistens ganz gut, aber nicht 100%ig.
Ansonsten könnte man sich mit einem Timer behelfen, der nach einer Verzögerung prüft, ob die Aktion noch relevant ist.
Die mögliche Startverzögerung der Animation wird da sicher nicht helfen, die die vermutlich nicht mehr abzubrechen ist - oder?