delphidelphi-xe2wizardtoolsapi

How to add a target platform to a Delphi Project via the OpenTools API


In Delphi (XE2 through to XE5), how can one programmatically add a target platform to a project?

By "programmatically", I mean through the OpenTools API, as opposed to a transform of the .dproj file. This is to be done inside an IDE Wizard/Expert.

I've looked at the ToolsAPI unit, and it appears you can get the active platform, and the list of supported platforms, but there is nothing obvious for adding a new target platform.


Solution

  • It seems that this is possible. The unit you need to look in is PlatformAPI. The interface that has what you need is:

      { Provides information on platform-specific information held by a project }
      IOTAProjectPlatforms160 = interface(IInterface)
        ['{E1C62726-BD51-4D4E-A2F2-9A8A59F272AE}']
        { Add an available platform to the project }
        procedure AddPlatform(const PlatformName: string);
        { Return the currently active platform key }
        function CurrentPlatform: string;
        { Return enabled state of the requested platform }
        function GetEnabled(const PlatformName: string): Boolean;
        { Return an array of strings representing the enabled platforms for a project }
        function GetEnabledPlatforms: TArray<string>;
        { Return the profile name associated with the specified platform }
        function GetProfile(const PlatformName: string): string;
        { Does the project support platform specified by PlatformName? }
        function GetSupported(const PlatformName: string): Boolean;
        { Return an array of strings representing the valid platforms for a project }
        function GetSupportedPlatforms: TArray<string>;
        { Set a platform as disabled for this project (cannot be made active) }
        procedure SetEnabled(const PlatformName: string; Value: Boolean);
        { Set the profile name for the specified platform. Pass an empty string to
          clear the profile }
        procedure SetProfile(const PlatformName, ProfileName: string);
        { Indicate the specified platform is supported or not }
        procedure SetSupported(const PlatformName: string; Value: Boolean);
        { Return whether or not the profile associated with PlatformName is the default profile
          for that platform }
        function UsingDefaultProfile(const PlatformName: string): Boolean;
    
        property EnabledPlatforms: TArray<string> read GetEnabledPlatforms;
        property Enabled[const PlatformName: string]: Boolean read GetEnabled write SetEnabled;
        property Profile[const PlatformName: string]: string read GetProfile write SetProfile;
        property Supported[const PlatformName: string]: Boolean read GetSupported write SetSupported;
        property SupportedPlatforms: TArray<string> read GetSupportedPlatforms;
      end;
    

    The AddPlatform method appears to be your guy.

    Note that I've not attempted to call the method. In fact all I did was search for the word platform in the tools API source folder.