Во-первых, ничего не делайте с событием мыши, потому что всплывающее меню может быть вызвано с клавиатуры.
На мой взгляд, лучший способ сделать это - обработать событие OnPopup
. Если вы хотите, чтобы меню не появлялось, звоните Abort
.
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
if SomeCondition then
Abort;
end;