Nice, although you use left mouse button to show the pop-menu, it is unusual.
The same job can be done using OnContextPopup event which is triggered before the pop-menu is displayed. TSpeedButton, which you use in your demo, hasn't got this event published but I believe it's there, it only has to be assigned at run-time (via code).
Shared code for the event can look like this:
procedure TForm1.FormContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
begin
pmShared.PopupComponent:=TComponent(Sender);
end;
It will assign to property PopupComponent the control which raises the pop-menu.