Se puede.
Necesitas un mecanismo para diferenciar qué botón se ha pulsado, y después, en tiempo de ejecución es cuando asignas el menú.
A cada botón, en el inspector de objetos, le pones un número en la propiedad Tag, por ejemplo:
Código:
boton XXXX YYYYY ZZZZZ 11111 22222 333333
tag 1 2 3 4 5 6
A todos los botones, le pones el mismo evento Onclick, y en dicho evento:
Código Delphi
[-]
case TButton(Sender).tag of
1 : panel1.popupmenu := ppxxx1;
2 : panel1.popupmenu := ppyyy1;
3 : panel1.popupmenu := ppzzz1;
4 : panel1.popupmenu := pp1111;
etc.
end;
El evento onclick trae el parámetro "Sender:TObject" (Sender es el botón sobre el que se ha hecho click).
Por supuesto tendrás creados los popupmenus o menus llamados ppxxxx1, ppyyy1, etc.
Saludos