Hi,
There are a few options. Depending on your project, one might be a better choice than the other. (no particular order)
1) Use IFDEF. If you have a centralized unit where all those options are assigned, you can create in project manager a Release Customer A, Release Customer B,... , etc.
In each project configuration option, you should add a conditional define such as __CUSTOMER_A__, __CUSTOMER_B__, ...etc.
Your unit(s) will get a bunch of $IFDEFs :
// control Main Menus
{$IFDEF __CUSTOMER_A_} EnableVisioMenu := false;{$ENDIF} // Customer A
{$IFDEF __CUSTOMER_B_} EnableDrawingMenu := false;{$ENDIF} // Customer B
// control PopupMenu options
EnableCntxt_ImportFromVision := {$IFNDEF __CUSTOMER_C} false {$ELSE} true{$ENDIF}; // ???
...
As you can see, the more customers you get, the more difficult it will be to maintain such spaghetti, but it gets the job done.
2) Use an encrypted external configuration file
The file gets constructed according to each customer, the executable remains the same. The only difference is the config file. When you deliver your application, this file goes together. If you absolutely need to keep things in one file, you might consider generating a resource file (.RC) that will be included with your executable. Be aware that some anti-virus might show false positives. The file itself can be very simple, such as an INI file. As long as it's encrypted, it will do it's job.
3) More sophisticated license manager that will allow to handle properly many customers.