From mine [private] component set:
[pascal]unit XRunnerDesign;

interface

{$Include JEDI.inc}

uses
Classes, SysUtils, TypInfo,
{$IFNDEF VER140}
DsgnIntf,
{$ELSE}
DesignEditors, DesignIntf,
{$ENDIF}
Direct3D8, XRunnerCore, XRunnerDisplay, XRTimer;

type
{ TDirectDrawDisplayProperty }
TXRunnerD3DFormat = class(TStringProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure GetValues(Proc: TGetStrProc); override;
end;

TXRunnerBackFormat = class(TXRunnerD3DFormat)
public
procedure GetValues(Proc: TGetStrProc); override;
end;

TXRunnerDepthFormat = class(TXRunnerD3DFormat)
public
procedure GetValues(Proc: TGetStrProc); override;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterPropertyEditor(TypeInfo(String), TXRunnerDisplay, 'BackFormatStr', TXRunnerBackFormat);
RegisterPropertyEditor(TypeInfo(String), TXRunnerDisplay, 'DepthFormatStr', TXRunnerDepthFormat);

RegisterComponents('Visual', [TXRunnerDispatcher, TXRunner, TXROutputWindow, TXRunnerTimer]);
end;

{ TXRunnerD3DFormat }

function TXRunnerD3DFormat.GetAttributes: TPropertyAttributes;
begin
Result:= [paValueList, paMultiSelect, paRevertable];
end;

procedure TXRunnerD3DFormat.GetValues(Proc: TGetStrProc);
var
i: Integer;
begin
for i:= 0 to High(KnownFormats) do Proc(KnownFormats[i].N);
end;

{ TXRunnerBackFormat }

procedure TXRunnerBackFormat.GetValues(Proc: TGetStrProc);
begin
Proc('R8G8B8');
Proc('A8R8G8B8');
Proc('X8R8G8B8');
Proc('R5G6B5');
Proc('X1R5G5B5');
Proc('A1R5G5B5');
Proc('A4R4G4B4');
Proc('R3G3B2');
Proc('A8R3G3B2');
Proc('X4R4G4B4');
end;

{ TXRunnerDepthFormat }

procedure TXRunnerDepthFormat.GetValues(Proc: TGetStrProc);
var
i: Integer;
begin
for i:= 30 to 36 do Proc(KnownFormats[i].N);
end;

end.
[/code]

Forgot to add:
[code]unit XRunnerDisplay;

interface

{$Include JEDI.inc}

uses
Classes, SysUtils, Windows, MultiMon, Direct3D8;

type
....

{ TXRunnerDisplay }
TXRunnerDisplay = class(TPersistent)
private
...
FBackFormat: TD3DFormat;
FDepthFormat: TD3DFormat;
...
public
constructor Create; virtual;
property BackFormat: TD3DFormat read FBackFormat write SetBackFormat;
property DepthFormat: TD3DFormat read FDepthFormat write SetDepthFormat;
published
...
// Delphi6 RTTI & streaming hack
property BackFormatStr: String read GetBackFormat write SetBackFormatS;
property DepthFormatStr: String read GetDepthFormat write SetDepthFormatS;
...
end;

type
TFormatRec = record
N: PChar; // Name
F: TD3DFormat; // Format
end;

const
KnownFormats: array [0..39] of TFormatRec = (
(N:'UNKNOWN'; F3DFMT_UNKNOWN),

(N:'R8G8B8'; F3DFMT_R8G8B,
(N:'A8R8G8B8'; F3DFMT_A8R8G8B,
(N:'X8R8G8B8'; F3DFMT_X8R8G8B,
(N:'R5G6B5'; F3DFMT_R5G6B5),
(N:'X1R5G5B5'; F3DFMT_X1R5G5B5),
(N:'A1R5G5B5'; F3DFMT_A1R5G5B5),
(N:'A4R4G4B4'; F3DFMT_A4R4G4B4),
(N:'R3G3B2'; F3DFMT_R3G3B2),
(N:'A8'; F3DFMT_A,
(N:'A8R3G3B2'; F3DFMT_A8R3G3B2),
(N:'X4R4G4B4'; F3DFMT_X4R4G4B4),

(N:'A8P8'; F3DFMT_A8P,
(N:'P8'; F3DFMT_P,

(N:'L8'; F3DFMT_L,
(N:'A8L8'; F3DFMT_A8L,
(N:'A4L4'; F3DFMT_A4L4),

(N:'V8U8'; F3DFMT_V8U,
(N:'L6V5U5'; F3DFMT_L6V5U5),
(N:'X8L8V8U8'; F3DFMT_X8L8V8U,
(N:'Q8W8V8U8'; F3DFMT_Q8W8V8U,
(N:'V16U16'; F3DFMT_V16U16),
(N:'W11V11U10'; F3DFMT_W11V11U10),

(N:'UYVY'; F3DFMT_UYVY),
(N:'YUY2'; F3DFMT_YUY2),
(N:'DXT1'; F3DFMT_DXT1),
(N:'DXT2'; F3DFMT_DXT2),
(N:'DXT3'; F3DFMT_DXT3),
(N:'DXT4'; F3DFMT_DXT4),
(N:'DXT5'; F3DFMT_DXT5),

(N:'D16_LOCKABLE';F3DFMT_D16_LOCKABLE), // 30
(N:'D32'; F3DFMT_D32),
(N:'D15S1'; F3DFMT_D15S1),
(N:'D24S8'; F3DFMT_D24S,
(N:'D16'; F3DFMT_D16),
(N:'D24X8'; F3DFMT_D24X,
(N:'D24X4S4'; F3DFMT_D24X4S4),

(N:'VERTEXDATA';F3DFMT_VERTEXDATA), // 37
(N:'INDEX16'; F3DFMT_INDEX16),
(N:'INDEX32'; F3DFMT_INDEX32)
);

function D3DFormatToString(Format: TD3DFormat): String;
function StringToD3DFormat(Str: String): TD3DFormat;

implementation

uses Math;

....

function TXRunnerDisplay.GetBackFormat: String;
begin
Result:= D3DFormatToString(FBackFormat);
end;

function TXRunnerDisplay.GetDepthFormat: String;
begin
Result:= D3DFormatToString(FDepthFormat);
end;


function D3DFormatToString(Format: TD3DFormat): String;
var
i: Integer;
begin
for i:= 0 to High(KnownFormats) do
if KnownFormats[i].F = Format then
begin
Result:= KnownFormats[i].N;
Exit;
end;
{$IFDEF COMPILER6_UP}
Result:= IntToStr(Integer(Format));
{$ELSE}
Result:= IntToStr(Format);
{$ENDIF}
end;

function StringToD3DFormat(Str: String): TD3DFormat;
var
i: Integer;
begin
Result:= D3DFMT_UNKNOWN;
Str:= UpperCase(Str);
for i:= 0 to High(KnownFormats) do
if KnownFormats[i].N = Str then
begin
Result:= KnownFormats[i].F;
Exit;
end;
end;

end.
[/pascal]
So for Delphi6 and up for enums with explicit valued (these can not be published) you have to add ghost properties:
[pascal] // Delphi6 RTTI & streaming hack
property BackFormatStr: String read GetBackFormat write SetBackFormatS;
property DepthFormatStr: String read GetDepthFormat write SetDepthFormatS;[/pascal]