procedure TForm1.Timer1Timer(Sender: TObject);
var
vHandle: THandle;
vBuffer: array[0..255] of Char;
begin
vHandle := WindowFromPoint(Mouse.CursorPos);
if Integer(vHandle) = PopupMenu1.Tag then Exit;
GetClassName(vHandle, vBuffer, SizeOf(vBuffer));
if SameText('#32768', vBuffer) then Exit;
EndMenu;
Timer1.Enabled := False;
end;
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
vPoint: TPoint;
begin
if Timer1.Enabled then Exit;
Timer1.Enabled := True;
vPoint := ClientToScreen(Point(TControl(Sender).Left,
TControl(Sender).Top + TControl(Sender).Height));
PopupMenu1.Tag := TWinControl(Sender).Handle;
PopupMenu1.Popup(vPoint.X, vPoint.Y);
end;