PDA

View Full Version : windows mobile DDraw.h for FPC , but need help



LYH1
30-12-2008, 02:42 PM
I translated the DDraw.h from WM6 but I always fail on create surface,
even example from WM SDK still fail while creating surface.(I deploy the example in VS)
But the example from here can use directdraw on both emulator and my HTC Touch.
http://www.codeproject.com/KB/mobile/Caleidoscope.aspx

my direct draw code:



var
Form1 : TForm1;
m_pdd : IDirectDraw;
m_ddsd : TDDSURFACEDESC ;
m_psurf : IDirectDrawSurface ;
m_psurf2 : IDirectDrawSurface ;
m_cbpp : DWORD;
m_xpitch : longint;
m_ypitch : longint;
m_framebufwidth : DWORD;
m_framebufheight : DWORD;
aimage : TPicture;

...

procedure TForm1.FormCreate(Sender: TObject);
Var mResult : HResult;
begin
mResult := DirectDrawCreate(nil,m_pdd ,nil);
if mResult <> DD_OK then exit;

mResult &#58;= m_pdd.SetCooperativeLevel&#40;Handle,DDSCL_FULLSCREEN&#41; ;
if mResult <> DD_OK then
begin
m_pdd._Release;
m_pdd &#58;= nil;
exit;
end;

m_psurf &#58;= nil;
end;

...

procedure TForm1.FormClose&#40;Sender&#58; TObject; var CloseAction&#58; TCloseAction&#41;;
begin
try
m_psurf._Release;
m_psurf &#58;= nil;
m_pdd._Release;
m_pdd &#58;= nil;
except
end;
end;
...

procedure TForm1.Timer1Timer&#40;Sender&#58; TObject&#41;;
var DF&#58; TDDBltFX;
mResult &#58; HResult;
pbuf &#58; pwidechar;
buf &#58; array &#91;0 .. 255&#93; of widechar;
mhdc &#58; HDC;
begin
if m_psurf = nil then
begin
ZeroMemory&#40;@m_ddsd, sizeof&#40;m_ddsd&#41;&#41;;
m_ddsd.dwSize&#58;= sizeof&#40;m_ddsd&#41;;
m_ddsd.dwFlags&#58;=DDSD_CAPS or DDSD_PIXELFORMAT;
m_ddsd.ddsCaps.dwCaps&#58;= DDSCAPS_PRIMARYSURFACE ;
m_ddsd.ddpfPixelFormat.dwSize&#58;= sizeof&#40;DDPIXELFORMAT&#41;;
m_ddsd.ddpfPixelFormat.dwFlags&#58;=DDPF_RGB;



mResult &#58;= m_pdd.CreateSurface&#40;m_ddsd, m_psurf2,nil&#41;; //<----Always Fail Here
if mResult <> DD_OK then
begin
timer1.Enabled&#58;=false;
m_pdd._Release;
m_pdd &#58;= nil;
exit;
end;


//load image from file
pbuf &#58;= pwidechar&#40;buf&#41;;
GetModuleFileName&#40;null,pbuf,255&#41;;
aimage.LoadFromFile&#40;buf1+'tmp.jpg'&#41;;



ZeroMemory&#40;@m_ddsd, sizeof&#40;m_ddsd&#41;&#41;;
m_ddsd.dwSize&#58;= sizeof&#40;m_ddsd&#41;;
mResult &#58;= m_psurf.Lock&#40;nil,m_ddsd,DDLOCK_WAITNOTBUSY, 0&#41;;
if mResult <> DD_OK then
begin
m_psurf._Release;
m_psurf &#58;= nil;
m_pdd._Release;
m_pdd &#58;= nil;
exit;
end;

m_cbpp &#58;=m_ddsd.ddpfPixelFormat.dwRGBBitCount;
m_xpitch &#58;=m_ddsd.lXPitch;
m_ypitch &#58;=m_ddsd.lPitch;
m_framebufwidth &#58;=m_ddsd.dwWidth;
m_framebufheight &#58;=m_ddsd.dwHeight;

m_psurf.GetDC&#40;mHDC&#41;;
BitBlt&#40;mHDC,0,0,320,240,aimage.Bitmap.Canvas.Handl e,0, 0, SRCCOPY&#41;;
m_psurf.ReleaseDC&#40;mHDC&#41;;

m_psurf.Unlock&#40;nil&#41;;
end;


m_ddsd.dwSize &#58;= sizeof&#40;m_ddsd&#41;;

mResult &#58;= m_psurf.Lock&#40;nil,m_ddsd,DDLOCK_WAITNOTBUSY, 0&#41;;
if mResult <> DD_OK then
begin
m_psurf._Release;
m_psurf &#58;= nil;
m_pdd._Release;
m_pdd &#58;= nil;
exit;
end;
//fill 0! clear scr
//DF.dwsize &#58;= SizeOf&#40;DF&#41;;
//DF.dwFillColor &#58;= 0;

//m_psurf.Blt&#40;srcrect,nil,destrect,DDBLT_COLORFILL or DDBLT_WAITNOTBUSY, DF&#41;;

//DF.dwROP&#58;= SRCCOPY;
//m_psurf.Blt&#40;srcrect,m_psurf2,destrect,DDBLT_ROP,DF &#41;;

m_psurf.Unlock&#40;nil&#41;;


end;

LYH1
30-12-2008, 02:45 PM
Direct Draw Header I use for above code, I dont know if somethings wrong or not



// This ddraw unit is for windows mobile 5 or above
unit ddraw;
interface
uses windows;

//
// Copyright &#40;c&#41; Microsoft Corporation. All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement &#40;EULA&#41; under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
&#123;================================================= =========================;
*
* File&#58; ddraw.h
* Content&#58; DirectDraw include file
*
************************************************** ************************ &#125;
const
IID_IDirectDraw&#58; TGUID = '&#123;9C59509A-39BD-11D1-8C4A-00C04FD930C5&#125;';
IID_IDirectDrawSurface&#58; TGUID = '&#123;0b0e83e4-f37f-11d2-8b15-00c04F689292&#125;';
IID_IDirectDrawPalette&#58; TGUID = '&#123;6C14DB84-A733-11CE-A521-0020AF0BE560&#125;';
IID_IDirectDrawClipper&#58; TGUID = '&#123;6C14DB85-A733-11CE-A521-0020AF0BE560&#125;';
IID_IDirectDrawColorControl&#58; TGUID = '&#123;4B9F0EE0-0D7E-11D0-9B06-00A0C903A3B8&#125;';
IID_IDirectDrawGammaControl&#58; TGUID = '&#123;69C11C3E-B46B-11D1-AD7A-00C04FC29B4E&#125;';


type
IDirectDraw = interface;
IDirectDrawSurface = interface;
IDirectDrawPalette = interface;
IDirectDrawClipper = interface;
IDirectDrawColorControl = interface;
IDirectDrawGammaControl = interface;

//
// DirectDraw Structures
//

//
// DDCOLORKEY
//

PDDCOLORKEY = ^TDDCOLORKEY;
TDDCOLORKEY = record
dwColorSpaceLowValue &#58; DWORD;&#123; low boundary of color space that is to &#125;
&#123; be treated as Color Key, inclusive &#125;
dwColorSpaceHighValue &#58; DWORD; &#123; high boundary of color space that is &#125;
&#123; to be treated as Color Key, inclusive &#125;
end;
DDCOLORKEY = TDDCOLORKEY;
LPDDCOLORKEY = PDDCOLORKEY;
//
// DDARGB
// Generic pixel format with 8-bit RGB and alpha components
//

PDDARGB = ^TDDARGB;
TDDARGB = record
blue &#58; BYTE;
green &#58; BYTE;
red &#58; BYTE;
alpha &#58; BYTE;
end;
DDARGB = TDDARGB;
LPDDARGB = PDDARGB;

//
// DDBLTFX
//
PDDBLTFX = ^TDDBLTFX;
TDDBLTFX = record
dwSize &#58; DWORD;&#123; size of structure &#125;
dwROP &#58; DWORD;&#123; Win32 raster operations &#125;
dwFillColor &#58; DWORD; &#123; color in RGB or Palettized &#40;Brush value for Win32 ROPs&#41; &#125;
ddckDestColorkey &#58; TDDCOLORKEY; &#123; DestColorkey override &#125;
ddckSrcColorkey &#58; TDDCOLORKEY;&#123; SrcColorkey override &#125;
end;
DDBLTFX = TDDBltFX;
LPDDBLTFX = PDDBltFX;

//
// DDALPHABLTFX
//
PDDALPHABLTFX = ^TDDALPHABLTFX;
TDDALPHABLTFX = record
dwSize &#58; DWORD;&#123; size of structure &#125;
ddargbScaleFactors &#58; TDDARGB;&#123; Constant scaling factors &#125;
dwFillColor &#58; DWORD;&#123; color in ARGB or Palettized &#125;
end;
DDALPHABLTFX = TDDALPHABLTFX;
LPDDALPHABLTFX = PDDALPHABLTFX;

//
// DDSCAPS
// Caps bits defined below.
//
PDDSCaps = ^TDDSCaps;
TDDSCaps = record
dwCaps&#58; DWORD; // capabilities of surface wanted
end;

DDSCAPS = TDDSCaps;
LPDDSCAPS = PDDSCaps;


//
// DDCAPS
//
const
DD_ROP_SPACE = 256 div 32; &#123; space required to store ROP array &#125;

type
PDDCAPS = ^TDDCAPS;
TDDCAPS = record
dwSize &#58; DWORD; &#123; size of the DDCAPS structure &#125;
&#123; Surface capabilities &#125;
dwVidMemTotal &#58; DWORD;&#123; total amount of video memory &#125;
dwVidMemFree &#58; DWORD; &#123; amount of free video memory &#125;
dwVidMemStride &#58; DWORD;&#123; video memory stride &#40;0 if linear&#41; &#125;
ddsCaps &#58; TDDSCAPS;&#123; surface caps &#125;
dwNumFourCCCodes &#58; DWORD; &#123; number of four cc codes &#125;
&#123; palette capabilities &#125;
dwPalCaps &#58; DWORD;&#123; Palette capabilities &#125;

&#123; Hardware blitting capabilities &#125;
dwBltCaps &#58; DWORD; &#123; driver specific capabilities &#125;
dwCKeyCaps &#58; DWORD;&#123; color key blitting capabilities &#125;
dwAlphaCaps &#58; DWORD;&#123; alpha blitting capabilities &#125;
dwRops &#58; array&#91;0..&#40;DD_ROP_SPACE&#41;-1&#93; of DWORD;&#123; ROPS supported &#125;

&#123; general overlay capabilities. &#125;
dwOverlayCaps &#58; DWORD;&#123; Overlay capabilities &#125;
dwMaxVisibleOverlays &#58; DWORD;&#123; maximum number of visible overlays &#125;
dwCurrVisibleOverlays &#58; DWORD;&#123; current number of visible overlays &#125;

dwAlignBoundarySrc &#58; DWORD; &#123; source rectangle alignment &#125;
dwAlignSizeSrc &#58; DWORD;&#123; source rectangle byte size &#125;
dwAlignBoundaryDest &#58; DWORD;&#123; dest rectangle alignment &#125;
dwAlignSizeDest &#58; DWORD; &#123; dest rectangle byte size &#125;

dwMinOverlayStretch &#58; DWORD;&#123; minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 &#125;
dwMaxOverlayStretch &#58; DWORD;&#123; maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 &#125;

&#123; Miscalenous capabilies &#125;
dwMiscCaps &#58; DWORD;
end;
DDCAPS = TDDCAPS;
LPDDCAPS = PDDCAPS;

//
// DDPIXELFORMAT
//
type
PDDPixelFormat = ^TDDPixelFormat;
TDDPixelFormat = record
dwSize&#58; DWORD; // size of structure
dwFlags&#58; DWORD; // pixel format flags
dwFourCC&#58; DWORD; // &#40;FOURCC code&#41;
case Integer of
0&#58; &#40;
dwRGBBitCount&#58; DWORD; // how many bits per pixel
dwYUVBitCount&#58; DWORD; // how many bits per pixel
dwAlphaBitDepth&#58; DWORD; // how many bits for alpha channels
&#41;;
1&#58; &#40;
dwRBitMask &#58; DWORD; // mask for red bit
dwYBitMask &#58; DWORD ; // mask for Y bits
&#41;;
2&#58; &#40;
dwGBitMask &#58; DWORD; // mask for green bits
dwUBitMask &#58; DWORD; // mask for U bits
&#41;;
3&#58; &#40;
dwBBitMask &#58; DWORD; // mask for blue bits
dwVBitMask &#58; DWORD; // mask for V bits
&#41;;
4&#58; &#40;
dwRGBAlphaBitMask &#58; DWORD; // mask for alpha channel
&#41;;
end;
DDPIXELFORMAT = TDDPixelFormat;
LPDDPIXELFORMAT = PDDPixelFormat;


const
DDPF_ALPHAPIXELS = $00000001;
DDPF_ALPHA = $00000002;
DDPF_FOURCC = $00000004;
DDPF_PALETTEINDEXED = $00000020;
DDPF_RGB = $00000040;
DDPF_ALPHAPREMULT = $00008000;
DDPF_VALID = DDPF_ALPHAPIXELS or DDPF_ALPHA or
DDPF_FOURCC or DDPF_PALETTEINDEXED or
DDPF_RGB or DDPF_ALPHAPREMULT;

&#123;DDSURFACEDESC&#125;
type
PDDSurfaceDesc = ^TDDSurfaceDesc;
TDDSurfaceDesc = record
dwSize &#58; DWORD; // size of the DDSURFACEDESC structure
dwFlags &#58; DWORD; // determines what fields are valid
dwHeight &#58; DWORD; // height of surface to be created
dwWidth &#58; DWORD; // width of input surface
lPitch &#58; LONGint; // bytes to next line down &#40;return value only&#41;
lXPitch &#58; LONGint; // bytes to next pixel right &#40;return value only&#41;
dwBackBufferCount &#58; DWORD; // number of back buffers requested
dwRefreshRate &#58; DWORD; // refresh rate &#40;used when display mode is described&#41;
lpSurface &#58; pointer; // pointer to the associated surface memory
ddckCKDestOverlay &#58; DDCOLORKEY; // color key for destination overlay use
ddckCKDestBlt &#58; DDCOLORKEY; // color key for destination blt use
ddckCKSrcOverlay &#58; DDCOLORKEY; // color key for source overlay use
ddckCKSrcBlt &#58; DDCOLORKEY; // color key for source blt use
ddpfPixelFormat &#58; DDPIXELFORMAT; // pixel format description of the surface
ddsCaps &#58; TDDSCAPS; // direct draw surface capabilities
dwSurfaceSize &#58; DWORD; // Surface size, in bytes
end;
DDSURFACEDESC = TDDSurfaceDesc;
LPDDSURFACEDESC = PDDSurfaceDesc;

&#123;
* DDSURFACEDESC dwFlags values.
&#125;

const
DDSD_CAPS = $00000001;
DDSD_HEIGHT = $00000002;
DDSD_WIDTH = $00000004;
DDSD_PITCH = $00000008;
DDSD_XPITCH = $00000010;
DDSD_BACKBUFFERCOUNT = $00000020;
DDSD_LPSURFACE = $00000800;
DDSD_PIXELFORMAT = $00001000;
DDSD_CKDESTOVERLAY = $00002000;
DDSD_CKDESTBLT = $00004000;
DDSD_CKSRCOVERLAY = $00008000;
DDSD_CKSRCBLT = $00010000;
DDSD_REFRESHRATE = $00040000;
DDSD_SURFACESIZE = $00080000;
DDSD_VALID = DDSD_CAPS or DDSD_HEIGHT or
DDSD_WIDTH or DDSD_PITCH or
DDSD_XPITCH or DDSD_BACKBUFFERCOUNT or
DDSD_LPSURFACE or DDSD_PIXELFORMAT or
DDSD_CKDESTOVERLAY or DDSD_CKDESTBLT or
DDSD_CKSRCOVERLAY or DDSD_CKSRCBLT or
DDSD_REFRESHRATE or DDSD_SURFACESIZE;
DDSD_ENUM_VALID = DDSD_CAPS or DDSD_HEIGHT or DDSD_WIDTH or DDSD_PIXELFORMAT;


//
//DDOVERLAYFX
//
type
PDDOVERLAYFX = ^TDDOVERLAYFX;
TDDOVERLAYFX = record
dwSize &#58; DWORD;&#123; size of structure &#125;

dwAlphaConstBitDepth &#58; DWORD;&#123; Bit depth used to specify alpha constant. &#125;
dwAlphaConst &#58; DWORD; &#123; Constant to use as alpha channel. &#125;

dckDestColorkey &#58; TDDCOLORKEY;&#123; DestColorkey override &#125;
dckSrcColorkey &#58; TDDCOLORKEY;&#123; DestColorkey override &#125;
end;
DDOVERLAYFX = TDDOVERLAYFX;
LPDDOVERLAYFX = PDDOVERLAYFX;
//
// DDGAMMARAMP
//

PDDGAMMARAMP = ^TDDGAMMARAMP;
TDDGAMMARAMP = record
red &#58; array&#91;0..255&#93; of WORD;
green &#58; array&#91;0..255&#93; of WORD;
blue &#58; array&#91;0..255&#93; of WORD;
end;
DDGAMMARAMP = TDDGAMMARAMP;
LPDDGAMMARAMP = PDDGAMMARAMP;


//
// This is the structure within which DirectDraw returns data about the current graphics driver and chipset
//

const
MAX_DDDEVICEID_STRING = 512;

type
PDDDEVICEIDENTIFIER = ^TDDDEVICEIDENTIFIER;
TDDDEVICEIDENTIFIER = record

// * These elements are for presentation to the user only. They should not be used to identify particular
// * drivers, since this is unreliable and many different strings may be associated with the same
// * device, and the same driver from different vendors.
szDriver &#58; array&#91;0..&#40;MAX_DDDEVICEID_STRING&#41;-1&#93; of wchar;
szDescription &#58; array&#91;0..&#40;MAX_DDDEVICEID_STRING&#41;-1&#93; of wchar;
&#123;
* This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons
* on the whole 64 bits. Caution should be exercised if you use this element to identify problematic
* drivers. It is recommended that guidDeviceIdentifier is used for this purpose.
*
* This version has the form&#58;
* wProduct = HIWORD&#40;liDriverVersion.HighPart&#41;
* wVersion = LOWORD&#40;liDriverVersion.HighPart&#41;
* wSubVersion = HIWORD&#40;liDriverVersion.LowPart&#41;
* wBuild = LOWORD&#40;liDriverVersion.LowPart&#41;
&#125;
liDriverVersion &#58; LARGE_INTEGER;
&#123;
* These elements can be used to identify particular chipsets. Use with extreme caution.
* dwVendorId Identifies the manufacturer. May be zero if unknown.
* dwDeviceId Identifies the type of chipset. May be zero if unknown.
* dwSubSysId Identifies the subsystem, typically this means the particular board. May be zero if unknown.
* dwRevision Identifies the revision level of the chipset. May be zero if unknown.
&#125;
dwVendorId &#58; DWORD;
dwDeviceId &#58; DWORD;
dwSubSysId &#58; DWORD;
dwRevision &#58; DWORD;
&#123;
* This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the
* driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to
* reprofile the graphics subsystem.
* This element can also be used to identify particular problematic drivers.
&#125;
guidDeviceIdentifier &#58; TGUID;
end;
DDDEVICEIDENTIFIER = TDDDEVICEIDENTIFIER;
LPDDDEVICEIDENTIFIER = PDDDEVICEIDENTIFIER;


//
// DDCOLORCONTROL
//
type
PDDColorControl = ^TDDColorControl;
TDDColorControl = record
dwSize&#58; DWORD;
dwFlags&#58; DWORD;
lBrightness&#58; Longint;
lContrast&#58; Longint;
lHue&#58; Longint;
lSaturation&#58; Longint;
lSharpness&#58; Longint;
lGamma&#58; Longint;
lColorEnable&#58; Longint;
end;

DDCOLORCONTROL = TDDColorControl;
LPDDCOLORCONTROL = PDDCOLORCONTROL;


//
// DDCOLORCONTROL dwFlags values.
//
const
DDCOLOR_BRIGHTNESS = $00000001;
DDCOLOR_CONTRAST = $00000002;
DDCOLOR_HUE = $00000004;
DDCOLOR_SATURATION = $00000008;
DDCOLOR_SHARPNESS = $00000010;
DDCOLOR_GAMMA = $00000020;
DDCOLOR_COLORENABLE = $00000040;
DDCOLOR_VALID = DDCOLOR_BRIGHTNESS or DDCOLOR_CONTRAST or DDCOLOR_HUE or DDCOLOR_SATURATION or DDCOLOR_SHARPNESS or DDCOLOR_GAMMA or DDCOLOR_COLORENABLE;
//
// API's
//

type TDDENUMCALLBACKEX = function&#40;lpGUID&#58; PGUID; lpDriverDescription&#58; LPWSTR;
lpDriverName&#58; LPWSTR; lpContext&#58; Pointer; Monitor&#58; HMonitor&#41;&#58; BOOL; stdcall;


function DirectDrawEnumerateEx&#40;lpCallback&#58;TDDENUMCALLBACKEX ; lpContext&#58;Pointer; dwFlags&#58;DWORD&#41;&#58;HRESULT;stdcall; external 'DDraw.dll';
function DirectDrawCreate&#40;lpGUID&#58; PGUID; out lplpDD&#58; IDirectDraw; pUnkOuter&#58; IUnknown&#41;&#58; HResult; stdcall; external 'DDraw.dll';
function DirectDrawCreateClipper&#40;dwFlags&#58; DWORD; out lplpDDClipper&#58; IDirectDrawClipper; pUnkOuter&#58; IUnknown&#41;&#58; HResult; stdcall;external 'DDraw.dll';


//
// DirectDrawEnumerateEx Flags
//

// * This flag causes enumeration of any GDI display devices which are part of
// * the Windows Desktop


const
DDENUM_ATTACHEDSECONDARYDEVICES = $00000001;

// * This flag causes enumeration of any GDI display devices which are not
// * part of the Windows Desktop

DDENUM_DETACHEDSECONDARYDEVICES = $00000002;
DDENUM_VALID = DDENUM_ATTACHEDSECONDARYDEVICES or DDENUM_DETACHEDSECONDARYDEVICES;

// Enumeration function pointer types
type TDDEnumModesCallback = function&#40;const lpDDSurfaceDesc&#58; TDDSurfaceDesc; lpContext&#58; Pointer&#41;&#58; HResult; stdcall;
type LPDDENUMMODESCALLBACK = TDDEnumModesCallback;

type TDDEnumSurfacesCallback = function&#40;lpDDSurface&#58; IDirectDrawSurface; const lpDDSurfaceDesc&#58; TDDSurfaceDesc; lpContext&#58; Pointer&#41;&#58; HResult; stdcall;
type LPDDENUMSURFACESCALLBACK = TDDEnumSurfacesCallback;

//
// IDirectDraw
//
type
IDirectDraw = interface&#40;IUnknown&#41;
&#91;'&#123;9C59509A-39BD-11D1-8C4A-00C04FD930C5&#125;'&#93;
// IDirectDraw methods
function CreateClipper&#40;dwFlags&#58; DWORD; out lplpDDClipper&#58; IDirectDrawClipper;
pUnkOuter&#58; IUnknown&#41;&#58; HResult; stdcall;
function CreatePalette&#40;dwFlags&#58; DWORD; lpColorTable&#58; PPaletteEntry;
out lplpDDPalette&#58; IDirectDrawPalette; pUnkOuter&#58; IUnknown&#41;&#58; HResult; stdcall;
function CreateSurface&#40;const lpDDSurfaceDesc&#58; TDDSurfaceDesc;
out lplpDDSurface&#58; IDirectDrawSurface; pUnkOuter&#58; IUnknown&#41;&#58; HResult; stdcall;
function EnumDisplayModes&#40;dwFlags&#58; DWORD;
const lpDDSurfaceDesc&#58; TDDSurfaceDesc; lpContext&#58; Pointer;
lpEnumModesCallback&#58; TDDEnumModesCallback&#41;&#58; HResult; stdcall;
function EnumSurfaces&#40;dwFlags&#58; DWORD; const lpDDSD&#58; TDDSurfaceDesc;
lpContext&#58; Pointer; lpEnumCallback&#58; TDDEnumSurfacesCallback&#41;&#58; HResult; stdcall;
function FlipToGDISurface&#58; HResult; stdcall;
function GetCaps&#40;var lpDDDriverCaps&#58; TDDCaps; var lpDDHELCaps&#58; TDDCaps&#41;&#58; HResult; stdcall;
function GetDisplayMode&#40;var lpDDSurfaceDesc&#58; TDDSurfaceDesc&#41;&#58; HResult; stdcall;
function GetFourCCCodes&#40;var lpNumCodes, lpCodes&#58; DWORD&#41;&#58; HResult; stdcall;
function GetGDISurface&#40;out lplpGDIDDSSurface&#58; IDirectDrawSurface&#41;&#58; HResult; stdcall;
function GetMonitorFrequency&#40;var lpdwFrequency&#58; DWORD&#41;&#58; HResult; stdcall;
function GetScanLine&#40;var lpdwScanLine&#58; DWORD&#41;&#58; HResult; stdcall;
function GetVerticalBlankStatus&#40;var lpbIsInVB&#58; BOOL&#41;&#58; HResult; stdcall;
function RestoreDisplayMode&#58; HResult; stdcall;
function SetCooperativeLevel&#40;hWnd&#58; HWND; dwFlags&#58; DWORD&#41;&#58; HResult; stdcall;
function SetDisplayMode&#40;dwWidth, dwHeight, dwBpp&#58; DWORD&#41;&#58; HResult; stdcall;
function WaitForVerticalBlank&#40;dwFlags&#58; DWORD; hEvent&#58; THandle&#41;&#58; HResult; stdcall;
function GetAvailableVidMem&#40;var lpDDSCaps&#58; TDDSCaps;
var lpdwTotal, lpdwFree&#58; DWORD&#41;&#58; HResult; stdcall;
function GetSurfaceFromDC&#40;hdc&#58; HDC; lpDDS&#58; IDirectDrawSurface&#41;&#58; HResult; stdcall;
function RestoreAllSurfaces&#58; HResult; stdcall;
function TestCooperativeLevel&#58; HResult; stdcall;
function GetDeviceIdentifier&#40;var lpdddi&#58; TDDDeviceIdentifier; dwFlags&#58; DWORD&#41;&#58; HResult; stdcall;
end;


&#123; IDirectDrawPalette Interface &#125;

IDirectDrawPalette = interface&#40;IUnknown&#41;
&#91;'&#123;6C14DB84-A733-11CE-A521-0020AF0BE560&#125;'&#93;
// IDirectDrawPalette methods
function GetCaps&#40;varlpdwCaps&#58; DWORD&#41;&#58; HResult; stdcall;
function GetEntries&#40;dwFlags&#58; DWORD; dwBase&#58; DWORD; dwNumEntries&#58; DWORD;
lpEntries&#58; PPaletteEntry&#41;&#58; HResult; stdcall;
function SetEntries&#40;dwFlags&#58; DWORD; dwStartingEntry&#58; DWORD;
dwCount&#58; DWORD; lpEntries&#58; PPaletteEntry&#41;&#58; HResult; stdcall;
end;

&#123;IDirectDrawClipper&#125;

IDirectDrawClipper = interface&#40;IUnknown&#41;
&#91;'&#123;6C14DB85-A733-11CE-A521-0020AF0BE560&#125;'&#93;
// IDirectDrawClipper methods
function GetClipList&#40;const lpRect&#58; TRect; lpClipList&#58; PRgnData;
var lpdwSize&#58; DWORD&#41;&#58; HResult; stdcall;
function GetHWnd&#40;var lphWnd&#58; HWND&#41;&#58; HResult; stdcall;
function IsClipListChanged&#40;var lpbChanged&#58; BOOL&#41;&#58; HResult; stdcall;
function SetClipList&#40;lpClipList&#58; PRgnData; dwFlags&#58; DWORD&#41;&#58; HResult; stdcall;
function SetHWnd&#40;dwFlags&#58; DWORD; hWnd&#58; HWND&#41;&#58; HResult; stdcall;
end;


&#123;IDirectDrawSurface&#125;
IDirectDrawSurface = interface&#40;IUnknown&#41;
&#91;'&#123;0b0e83e4-f37f-11d2-8b15-00c04F689292&#125;'&#93;
// IDirectDrawSurface methods
function AddOverlayDirtyRect&#40;const lpRect&#58; TRect&#41;&#58; HResult; stdcall;
function Blt&#40;const lpDestRect&#58; TRect; lpDDSrcSurface&#58; IDirectDrawSurface;
const lpSrcRect&#58; TRect; dwFlags&#58; DWORD; const lpDDBltFx&#58; TDDBltFX&#41;&#58; HResult; stdcall;
function EnumAttachedSurfaces&#40;lpContext&#58; Pointer;
lpEnumSurfacesCallback&#58; TDDEnumSurfacesCallback&#41;&#58; HResult; stdcall;
function EnumOverlayZOrders&#40;dwFlags&#58; DWORD; lpContext&#58; Pointer;
lpfnCallback&#58; TDDEnumSurfacesCallback&#41;&#58; HResult; stdcall;
function Flip&#40;lpDDSurfaceTargetOverride&#58; IDirectDrawSurface;
dwFlags&#58; DWORD&#41;&#58; HResult; stdcall;
function GetBltStatus&#40;dwFlags&#58; DWORD&#41;&#58; HResult; stdcall;
function GetCaps&#40;var lpDDSCaps&#58; TDDSCaps&#41;&#58; HResult; stdcall;
function GetClipper&#40;out lplpDDClipper&#58; IDirectDrawClipper&#41;&#58; HResult; stdcall;
function GetColorKey&#40;dwFlags&#58; DWORD; var lpDDColorKey&#58; TDDColorKey&#41;&#58; HResult; stdcall;
function GetDC&#40;var lphDC&#58; HDC&#41;&#58; HResult; stdcall;
function GetFlipStatus&#40;dwFlags&#58; DWORD&#41;&#58; HResult; stdcall;
function GetOverlayPosition&#40;var lplX, lplY&#58; Longint&#41;&#58; HResult; stdcall;
function GetPalette&#40;out lplpDDPalette&#58; IDirectDrawPalette&#41;&#58; HResult; stdcall;
function GetPixelFormat&#40;var lpDDPixelFormat&#58; TDDPixelFormat&#41;&#58; HResult; stdcall;
function GetSurfaceDesc&#40;var lpDDSurfaceDesc&#58; TDDSurfaceDesc&#41;&#58; HResult; stdcall;
function IsLost&#58; HResult; stdcall;
function Lock&#40;lpDestRect&#58; PRect; const lpDDSurfaceDesc&#58; TDDSurfaceDesc;
dwFlags&#58; DWORD; hEvent&#58; THandle&#41;&#58; HResult; stdcall;
function ReleaseDC&#40;hDC&#58; HDC&#41;&#58; HResult; stdcall;
function Restore&#58; HResult; stdcall;
function SetClipper&#40;lpDDClipper&#58; IDirectDrawClipper&#41;&#58; HResult; stdcall;
function SetColorKey&#40;dwFlags&#58; DWORD; const lpDDColorKey&#58; TDDColorKey&#41;&#58; HResult; stdcall;
function SetOverlayPosition&#40;lX, lY&#58; Longint&#41;&#58; HResult; stdcall;
function SetPalette&#40;lpDDPalette&#58; IDirectDrawPalette&#41;&#58; HResult; stdcall;
function Unlock&#40;lpSurfaceData&#58; Pointer&#41;&#58; HResult; stdcall;
function UpdateOverlay&#40;const lpSrcRect&#58; TRect; lpDDDestSurface&#58; IDirectDrawSurface;
const lpDestRect&#58; TRect; dwFlags&#58; DWORD; const lpDDOverlayFx&#58; TDDOverlayFX&#41;&#58; HResult; stdcall;
function UpdateOverlayZOrder&#40;dwFlags&#58; DWORD; lpDDSReference&#58; IDirectDrawSurface&#41;&#58; HResult; stdcall;
function GetDDInterface&#40;out lplpDD&#58; IUnknown&#41;&#58; HResult; stdcall;
function AlphaBlt &#40;const lpDestRect&#58; TRect; lpDDSrcSurface&#58; IDirectDrawSurface;
const lpSrcRect&#58; TRect; dwFlags&#58; DWORD; const lpDDAlphaBltFx&#58; TDDALPHABLTFX&#41;&#58; HResult; stdcall;
end;


&#123; IDirectDrawColorControl&#125;

IDirectDrawColorControl = interface&#40;IUnknown&#41;
&#91;'&#123;4B9F0EE0-0D7E-11D0-9B06-00A0C903A3B8&#125;'&#93;
// IDirectDrawColorControl methods
function GetColorControls&#40;var lpColorControl&#58; TDDColorControl&#41;&#58; HResult; stdcall;
function SetColorControls&#40;const lpColorControl&#58; TDDColorControl&#41;&#58; HResult; stdcall;
end;



&#123; IDirectDrawGammaControl&#125;

IDirectDrawGammaControl = interface&#40;IUnknown&#41;
&#91;'&#123;69C11C3E-B46B-11D1-AD7A-00C04FC29B4E&#125;'&#93;
// IDirectDrawGammaControl methods
function GetGammaRamp&#40;dwFlags&#58; DWORD; var lpRampData&#58; TDDGammaRamp&#41;&#58; HResult; stdcall;
function SetGammaRamp&#40;dwFlags&#58; DWORD; const lpRampData&#58; TDDGammaRamp&#41;&#58; HResult; stdcall;
end;

&#123; DirectDraw Macros &#125;

function MAKEFOURCC&#40;ch0, ch1, ch2, ch3&#58; Char&#41; &#58; DWORD;


// * Direct Draw Capability Flags


// * Surface Capability Flags
const
DDSCAPS_ALPHA = $00000001;
DDSCAPS_BACKBUFFER = $00000002;
DDSCAPS_FLIP = $00000004;
DDSCAPS_FRONTBUFFER = $00000008;
DDSCAPS_OVERLAY = $00000010;
DDSCAPS_PALETTE = $00000020;
DDSCAPS_PRIMARYSURFACE = $00000040;
DDSCAPS_SYSTEMMEMORY = $00000080;
DDSCAPS_VIDEOMEMORY = $00000100;
DDSCAPS_WRITEONLY = $00000200;
DDSCAPS_READONLY = $00000800;
DDSCAPS_NOTUSERLOCKABLE = $00002000;
DDSCAPS_DYNAMIC = $00004000;
DDSCAPS_VALID = DDSCAPS_ALPHA or DDSCAPS_BACKBUFFER or
DDSCAPS_FLIP or DDSCAPS_FRONTBUFFER or
DDSCAPS_OVERLAY or DDSCAPS_PALETTE or
DDSCAPS_PRIMARYSURFACE or DDSCAPS_SYSTEMMEMORY or
DDSCAPS_VIDEOMEMORY or DDSCAPS_WRITEONLY or
DDSCAPS_READONLY or DDSCAPS_NOTUSERLOCKABLE or
DDSCAPS_DYNAMIC;

// * Palette Capability Flags

DDPCAPS_PRIMARYSURFACE = $00000010;
DDPCAPS_ALPHA = $00000400;
DDPCAPS_VALID = DDPCAPS_PRIMARYSURFACE or DDPCAPS_ALPHA;

// * DirectDraw Capability Flags


// * General hardware blitting capabilities &#40;For DDCAPS dwBltCaps field&#41;
DDBLTCAPS_READSYSMEM = $00000001;
DDBLTCAPS_WRITESYSMEM = $00000002;
DDBLTCAPS_FOURCCTORGB = $00000004;
DDBLTCAPS_COPYFOURCC = $00000008;
DDBLTCAPS_FILLFOURCC = $00000010;
DDBLTCAPS_VALID = &#40;&#40;&#40;DDBLTCAPS_READSYSMEM or DDBLTCAPS_WRITESYSMEM&#41; or DDBLTCAPS_FOURCCTORGB&#41; or DDBLTCAPS_COPYFOURCC&#41; or DDBLTCAPS_FILLFOURCC;

// * Hardware color key blitting capabilities &#40;For DDCAPS dwCKeyCaps field&#41;
DDCKEYCAPS_DESTBLT = $00000001;
DDCKEYCAPS_DESTBLTCLRSPACE = $00000002;
DDCKEYCAPS_DESTBLTCLRSPACEYUV = $00000004;
DDCKEYCAPS_SRCBLT = $00000200;
DDCKEYCAPS_SRCBLTCLRSPACE = $00000400;
DDCKEYCAPS_SRCBLTCLRSPACEYUV = $00000800;
DDCKEYCAPS_BOTHBLT = $00001000;
DDCKEYCAPS_VALID = &#40;&#40;&#40;&#40;&#40;DDCKEYCAPS_DESTBLT or DDCKEYCAPS_DESTBLTCLRSPACE&#41; or DDCKEYCAPS_DESTBLTCLRSPACEYUV&#41; or DDCKEYCAPS_SRCBLT&#41; or DDCKEYCAPS_SRCBLTCLRSPACE&#41; or DDCKEYCAPS_SRCBLTCLRSPACEYUV&#41; or DDCKEYCAPS_BOTHBLT;

// * Hardware alpha blitting capabilities &#40;For DDCAPS dwAlphaCaps field&#41;
DDALPHACAPS_ALPHAPIXELS = $00000001;
DDALPHACAPS_ALPHASURFACE = $00000002;
DDALPHACAPS_ALPHAPALETTE = $00000004;
DDALPHACAPS_ALPHACONSTANT = $00000008;
DDALPHACAPS_ARGBSCALE = $00000010;
DDALPHACAPS_SATURATE = $00000020;
DDALPHACAPS_PREMULT = $00000040;
DDALPHACAPS_NONPREMULT = $00000080;
DDALPHACAPS_ALPHAFILL = $00000800;
DDALPHACAPS_ALPHANEG = $00000100;
DDALPHACAPS_VALID = DDALPHACAPS_ALPHAPIXELS or DDALPHACAPS_ALPHASURFACE or
DDALPHACAPS_ALPHAPALETTE or DDALPHACAPS_ALPHACONSTANT or
DDALPHACAPS_ARGBSCALE or DDALPHACAPS_SATURATE or
DDALPHACAPS_PREMULT or DDALPHACAPS_NONPREMULT or
DDALPHACAPS_ALPHAFILL or DDALPHACAPS_ALPHANEG;

// * Overlay capabilities &#40; For DDCAPS dwOverlayCaps field&#41;
DDOVERLAYCAPS_FLIP = $00000001;
DDOVERLAYCAPS_FOURCC = $00000004;
DDOVERLAYCAPS_ZORDER = $00000008;
DDOVERLAYCAPS_MIRRORLEFTRIGHT = $00000010;
DDOVERLAYCAPS_MIRRORUPDOWN = $00000020;
DDOVERLAYCAPS_CKEYSRC = $00000040;
DDOVERLAYCAPS_CKEYSRCCLRSPACE = $00000080;
DDOVERLAYCAPS_CKEYSRCCLRSPACEYUV = $00000100;
DDOVERLAYCAPS_CKEYDEST = $00000200;
DDOVERLAYCAPS_CKEYDESTCLRSPACE = $00000400;
DDOVERLAYCAPS_CKEYDESTCLRSPACEYUV = $00000800;
DDOVERLAYCAPS_CKEYBOTH = $00001000;
DDOVERLAYCAPS_ALPHADEST = $00002000;
DDOVERLAYCAPS_ALPHASRC = $00008000;
DDOVERLAYCAPS_ALPHADESTNEG = $00002000;
DDOVERLAYCAPS_ALPHASRCNEG = $00008000;
DDOVERLAYCAPS_ALPHACONSTANT = $00010000;
DDOVERLAYCAPS_ALPHAPREMULT = $00040000;
DDOVERLAYCAPS_ALPHANONPREMULT = $00080000;
DDOVERLAYCAPS_ALPHAANDKEYDEST = $00100000;
DDOVERLAYCAPS_OVERLAYSUPPORT = $80000000;
DDOVERLAYCAPS_VALID = DDOVERLAYCAPS_FLIP or
DDOVERLAYCAPS_FOURCC or
DDOVERLAYCAPS_ZORDER or
DDOVERLAYCAPS_MIRRORLEFTRIGHT or
DDOVERLAYCAPS_MIRRORUPDOWN or
DDOVERLAYCAPS_CKEYSRC or
DDOVERLAYCAPS_CKEYSRCCLRSPACE or
DDOVERLAYCAPS_CKEYSRCCLRSPACEYUV or
DDOVERLAYCAPS_CKEYDEST or
DDOVERLAYCAPS_CKEYDESTCLRSPACE or
DDOVERLAYCAPS_CKEYDESTCLRSPACEYUV or
DDOVERLAYCAPS_CKEYBOTH or
DDOVERLAYCAPS_ALPHADEST or
DDOVERLAYCAPS_ALPHASRC or
DDOVERLAYCAPS_ALPHADESTNEG or
DDOVERLAYCAPS_ALPHASRCNEG or
DDOVERLAYCAPS_ALPHACONSTANT or
DDOVERLAYCAPS_ALPHAPREMULT or
DDOVERLAYCAPS_ALPHANONPREMULT or
DDOVERLAYCAPS_ALPHAANDKEYDEST or
DDOVERLAYCAPS_OVERLAYSUPPORT;


// Miscellaneous Capability Flags &#40;For DDCAPS dwMiscCaps member&#41;
DDMISCCAPS_READSCANLINE = $00000001;
DDMISCCAPS_READMONITORFREQ = $00000002;
DDMISCCAPS_READVBLANKSTATUS = $00000004;
DDMISCCAPS_FLIPINTERVAL = $00000008;
DDMISCCAPS_FLIPODDEVEN = $00000010;
DDMISCCAPS_FLIPVSYNCWITHVBI = $00000020;
DDMISCCAPS_COLORCONTROLOVERLAY = $00000040;
DDMISCCAPS_COLORCONTROLPRIMARY = $00000080;
DDMISCCAPS_GAMMACONTROLOVERLAY = $00000100;
DDMISCCAPS_GAMMACONTROLPRIMARY = $00000200;
DDMISCCAPS_VALID = DDMISCCAPS_READSCANLINE or DDMISCCAPS_READMONITORFREQ or
DDMISCCAPS_READVBLANKSTATUS or DDMISCCAPS_FLIPINTERVAL or
DDMISCCAPS_FLIPODDEVEN or DDMISCCAPS_FLIPVSYNCWITHVBI or
DDMISCCAPS_COLORCONTROLOVERLAY or DDMISCCAPS_COLORCONTROLPRIMARY or
DDMISCCAPS_GAMMACONTROLOVERLAY or DDMISCCAPS_GAMMACONTROLPRIMARY;


// DirectDraw method flags

//* Flags for IDirectDraw&#58;&#58;EnumSurfaces
DDENUMSURFACES_ALL = $00000001;
DDENUMSURFACES_MATCH = $00000002;
DDENUMSURFACES_NOMATCH = $00000004;
DDENUMSURFACES_CANBECREATED = $00000008;
DDENUMSURFACES_DOESEXIST = $00000010;
DDENUMSURFACES_VALID = DDENUMSURFACES_ALL or DDENUMSURFACES_MATCH or
DDENUMSURFACES_NOMATCH or DDENUMSURFACES_CANBECREATED or
DDENUMSURFACES_DOESEXIST;

//* Flags for IDirectDraw&#58;&#58;SetCooperativeLevel
DDSCL_NORMAL = $00000000;
DDSCL_FULLSCREEN = $00000001;
DDSCL_VALID = DDSCL_FULLSCREEN or DDSCL_NORMAL;

// * Flags for IDirectDraw&#58;&#58;WaitForVerticalBlank
DDWAITVB_BLOCKBEGIN = $00000001;
DDWAITVB_BLOCKEND = $00000004;
DDWAITVB_VALID = DDWAITVB_BLOCKBEGIN or DDWAITVB_BLOCKEND;

// * Flags for IDirectDrawSurface&#58;&#58;GetColorKey and IDirectDrawSurface&#58;&#58;SetColorKey
DDCKEY_COLORSPACE = $00000001;
DDCKEY_DESTBLT = $00000002;
DDCKEY_DESTOVERLAY = $00000004;
DDCKEY_SRCBLT = $00000008;
DDCKEY_SRCOVERLAY = $00000010;
DDCKEY_VALID = DDCKEY_DESTBLT or DDCKEY_DESTOVERLAY or DDCKEY_SRCBLT or DDCKEY_SRCOVERLAY;

// * Flags for IDirectDrawSurface&#58;&#58;Blt
DDBLT_COLORFILL = $00000400;
DDBLT_KEYDEST = $00002000;
DDBLT_KEYDESTOVERRIDE = $00004000;
DDBLT_KEYSRC = $00008000;
DDBLT_KEYSRCOVERRIDE = $00010000;
DDBLT_ROP = $00020000;
DDBLT_WAITNOTBUSY = $01000000;
DDBLT_WAITVSYNC = $00000001;
DDBLT_VALID = &#40;&#40;&#40;&#40;&#40;&#40;DDBLT_COLORFILL or DDBLT_KEYDEST&#41; or DDBLT_KEYDESTOVERRIDE&#41; or DDBLT_KEYSRC&#41; or DDBLT_KEYSRCOVERRIDE&#41; or DDBLT_ROP&#41; or DDBLT_WAITNOTBUSY&#41; or DDBLT_WAITVSYNC;

// Flags for IDirectDrawSurface&#58;&#58;AlphaBlt
DDABLT_NOBLEND = $02000000;
DDABLT_COLORFILL = $00100000;
DDABLT_ALPHADESTNEG = $00000004;
DDABLT_ALPHASRCNEG = $00000080;
DDABLT_WAITNOTBUSY = $01000000;
DDABLT_WAITVSYNC = $00000001;
DDABLT_VALID = &#40;&#40;&#40;&#40;DDABLT_NOBLEND or DDABLT_COLORFILL&#41; or DDABLT_ALPHADESTNEG&#41; or DDABLT_ALPHASRCNEG&#41; or DDABLT_WAITNOTBUSY&#41; or DDABLT_WAITVSYNC;

// Flags for IDirectDrawSurface&#58;&#58;Flip
DDFLIP_EVEN = $00000002;
DDFLIP_ODD = $00000004;
DDFLIP_INTERVAL1 = $01000000;
DDFLIP_INTERVAL2 = $02000000;
DDFLIP_INTERVAL4 = $04000000;
DDFLIP_WAITNOTBUSY = $00000008;
DDFLIP_WAITVSYNC = $00000001;
DDFLIP_VALID = &#40;&#40;&#40;&#40;&#40;DDFLIP_EVEN or DDFLIP_ODD&#41; or DDFLIP_INTERVAL1&#41; or DDFLIP_INTERVAL2&#41; or DDFLIP_INTERVAL4&#41; or DDFLIP_WAITNOTBUSY&#41; or DDFLIP_WAITVSYNC;
DDFLIP_INTERVAL3 = DDFLIP_INTERVAL1 or DDFLIP_INTERVAL2;
DDFLIP_INTERVALMASK = &#40;DDFLIP_INTERVAL1 or DDFLIP_INTERVAL2&#41; or DDFLIP_INTERVAL4;

// * Flag values for IDirectDrawSurface&#58;&#58;UpdateOverlay
DDOVER_ALPHADEST = $00000001;
DDOVER_ALPHADESTNEG = $00000002;
DDOVER_ALPHASRC = $00000004;
DDOVER_ALPHASRCNEG = $00000008;
DDOVER_ALPHACONSTOVERRIDE = $00000010;
DDOVER_HIDE = $00000020;
DDOVER_KEYDEST = $00000040;
DDOVER_KEYDESTOVERRIDE = $00000080;
DDOVER_KEYSRC = $00000100;
DDOVER_KEYSRCOVERRIDE = $00000200;
DDOVER_SHOW = $00000400;
DDOVER_MIRRORLEFTRIGHT = $00001000;
DDOVER_MIRRORUPDOWN = $00002000;
DDOVER_WAITNOTBUSY = $00004000;
DDOVER_WAITVSYNC = $00008000;
DDOVER_VALID = DDOVER_ALPHADEST or DDOVER_ALPHADESTNEG or
DDOVER_ALPHASRC or DDOVER_ALPHASRCNEG or
DDOVER_ALPHACONSTOVERRIDE or DDOVER_HIDE or
DDOVER_KEYDEST or DDOVER_KEYDESTOVERRIDE or
DDOVER_KEYSRC or DDOVER_KEYSRCOVERRIDE or
DDOVER_SHOW or DDOVER_MIRRORLEFTRIGHT or
DDOVER_MIRRORUPDOWN or DDOVER_WAITNOTBUSY or
DDOVER_WAITVSYNC;


// * Flags for IDirectDrawSurface&#58;&#58;Lock
DDLOCK_READONLY = $00000001;
DDLOCK_WRITEONLY = $00000002;
DDLOCK_DISCARD = $00000004;
DDLOCK_WAITNOTBUSY = $00000008;
DDLOCK_VALID = &#40;&#40;DDLOCK_READONLY or DDLOCK_WRITEONLY&#41; or DDLOCK_DISCARD&#41; or DDLOCK_WAITNOTBUSY;

// * Flags for IDirectDrawSurface&#58;&#58;GetFlipStatus
DDGFS_CANFLIP = $00000001;
DDGFS_ISFLIPDONE = $00000002;
DDGFS_VALID = DDGFS_CANFLIP or DDGFS_ISFLIPDONE;

// * Flags for IDirectDrawSurface&#58;&#58;GetBltStatus
DDGBS_CANBLT = $00000001;
DDGBS_ISBLTDONE = $00000002;
DDGBS_VALID = DDGBS_CANBLT or DDGBS_ISBLTDONE;

// * Flags for IDirectDrawSurface&#58;&#58;EnumOverlayZOrders
DDENUMOVERLAYZ_FRONTTOBACK = $00000001;
DDENUMOVERLAYZ_VALID = DDENUMOVERLAYZ_FRONTTOBACK;

// * Flags for IDirectDrawSurface&#58;&#58;UpdateOverlayZOrder
DDOVERZ_SENDTOFRONT = $00000000;
DDOVERZ_SENDTOBACK = $00000001;
DDOVERZ_MOVEFORWARD = $00000002;
DDOVERZ_MOVEBACKWARD = $00000003;
DDOVERZ_INSERTINFRONTOF = $00000004;
DDOVERZ_INSERTINBACKOF = $00000005;


//
// DirectDraw Return Codes
//

// * Enumeration function return values.
DDENUMRET_CANCEL = 0;
DDENUMRET_OK = 1;

//
// DirectDraw error codes.
//

const

DD_OK = 0;
DD_FALSE = S_FALSE;

DDERR_CURRENTLYNOTAVAIL = HResult&#40;$88760000 + 40&#41;;
DDERR_GENERIC = HResult&#40;E_FAIL&#41;;
DDERR_HEIGHTALIGN = HResult&#40;$88760000 + 90&#41;;
DDERR_INCOMPATIBLEPRIMARY = HResult&#40;$88760000 + 95&#41;;
DDERR_INVALIDCAPS = HResult&#40;$88760000 + 100&#41;;
DDERR_INVALIDCLIPLIST = HResult&#40;$88760000 + 110&#41;;
DDERR_INVALIDMODE = HResult&#40;$88760000 + 120&#41;;
DDERR_INVALIDOBJECT = HResult&#40;$88760000 + 130&#41;;
DDERR_INVALIDPARAMS = HResult&#40;E_INVALIDARG&#41;;
DDERR_INVALIDPIXELFORMAT = HResult&#40;$88760000 + 145&#41;;
DDERR_INVALIDRECT = HResult&#40;$88760000 + 150&#41;;
DDERR_LOCKEDSURFACES = HResult&#40;$88760000 + 160&#41;;
DDERR_NO3D = HResult&#40;$88760000 + 170&#41;;
DDERR_NOALPHAHW = HResult&#40;$88760000 + 180&#41;;
DDERR_NOCLIPLIST = HResult&#40;$88760000 + 205&#41;;
DDERR_NOCOLORCONVHW = HResult&#40;$88760000 + 210&#41;;
DDERR_NOCOOPERATIVELEVELSET = HResult&#40;$88760000 + 212&#41;;
DDERR_NOCOLORKEY = HResult&#40;$88760000 + 215&#41;;
DDERR_NOFLIPHW = HResult&#40;$88760000 + 230&#41;;
DDERR_NOGDI = HResult&#40;$88760000 + 240&#41;;
DDERR_NOMIRRORHW = HResult&#40;$88760000 + 250&#41;;
DDERR_NOTFOUND = HResult&#40;$88760000 + 255&#41;;
DDERR_NOOVERLAYHW = HResult&#40;$88760000 + 260&#41;;
DDERR_OVERLAPPINGRECTS = HResult&#40;$88760000 + 270&#41;;
DDERR_NORASTEROPHW = HResult&#40;$88760000 + 280&#41;;
DDERR_NOSTRETCHHW = HResult&#40;$88760000 + 310&#41;;
DDERR_NOVSYNCHW = HResult&#40;$88760000 + 335&#41;;
DDERR_NOZOVERLAYHW = HResult&#40;$88760000 + 350&#41;;
DDERR_OUTOFCAPS = HResult&#40;$88760000 + 360&#41;;
DDERR_OUTOFMEMORY = HResult&#40;E_OUTOFMEMORY&#41;;
DDERR_OUTOFVIDEOMEMORY = HResult&#40;$88760000 + 380&#41;;
DDERR_PALETTEBUSY = HResult&#40;$88760000 + 387&#41;;
DDERR_COLORKEYNOTSET = HResult&#40;$88760000 + 400&#41;;
DDERR_SURFACEBUSY = HResult&#40;$88760000 + 430&#41;;
DDERR_CANTLOCKSURFACE = HResult&#40;$88760000 + 435&#41;;
DDERR_SURFACELOST = HResult&#40;$88760000 + 450&#41;;
DDERR_TOOBIGHEIGHT = HResult&#40;$88760000 + 470&#41;;
DDERR_TOOBIGSIZE = HResult&#40;$88760000 + 480&#41;;
DDERR_TOOBIGWIDTH = HResult&#40;$88760000 + 490&#41;;
DDERR_UNSUPPORTED = HResult&#40;E_NOTIMPL&#41;;
DDERR_UNSUPPORTEDFORMAT = HResult&#40;$88760000 + 536&#41;;
DDERR_VERTICALBLANKINPROGRESS = HResult&#40;$88760000 + 537&#41;;
DDERR_WASSTILLDRAWING = HResult&#40;$88760000 + 540&#41;;
DDERR_DIRECTDRAWALREADYCREATED = HResult&#40;$88760000 + 562&#41;;
DDERR_PRIMARYSURFACEALREADYEXISTS = HResult&#40;$88760000 + 564&#41;;
DDERR_REGIONTOOSMALL = HResult&#40;$88760000 + 566&#41;;
DDERR_CLIPPERISUSINGHWND = HResult&#40;$88760000 + 567&#41;;
DDERR_NOCLIPPERATTACHED = HResult&#40;$88760000 + 568&#41;;
DDERR_NOPALETTEATTACHED = HResult&#40;$88760000 + 572&#41;;
DDERR_NOPALETTEHW = HResult&#40;$88760000 + 573&#41;;
DDERR_NOBLTHW = HResult&#40;$88760000 + 575&#41;;
DDERR_OVERLAYNOTVISIBLE = HResult&#40;$88760000 + 577&#41;;
DDERR_NOOVERLAYDEST = HResult&#40;$88760000 + 578&#41;;
DDERR_INVALIDPOSITION = HResult&#40;$88760000 + 579&#41;;
DDERR_NOTAOVERLAYSURFACE = HResult&#40;$88760000 + 580&#41;;
DDERR_EXCLUSIVEMODEALREADYSET = HResult&#40;$88760000 + 581&#41;;
DDERR_NOTFLIPPABLE = HResult&#40;$88760000 + 582&#41;;
DDERR_NOTLOCKED = HResult&#40;$88760000 + 584&#41;;
DDERR_CANTCREATEDC = HResult&#40;$88760000 + 585&#41;;
DDERR_NODC = HResult&#40;$88760000 + 586&#41;;
DDERR_WRONGMODE = HResult&#40;$88760000 + 587&#41;;
DDERR_IMPLICITLYCREATED = HResult&#40;$88760000 + 588&#41;;
DDERR_NOTPALETTIZED = HResult&#40;$88760000 + 589&#41;;
DDERR_DCALREADYCREATED = HResult&#40;$88760000 + 620&#41;;
DDERR_MOREDATA = HResult&#40;$88760000 + 690&#41;;
DDERR_VIDEONOTACTIVE = HResult&#40;$88760000 + 695&#41;;
DDERR_DEVICEDOESNTOWNSURFACE = HResult&#40;$88760000 + 699&#41;;



implementation

function MAKEFOURCC&#40;ch0, ch1, ch2, ch3&#58; Char&#41; &#58; DWORD;
begin
Result &#58;= Ord&#40;ch0&#41; + &#40;Ord&#40;ch1&#41; shl 8&#41; + &#40;Ord&#40;ch2&#41; shl 16&#41; + &#40;Ord&#40;ch3&#41; shl 24&#41;;
end;


end.