Results 1 to 2 of 2

Thread: windows mobile DDraw.h for FPC , but need help

  1. #1

    windows mobile DDraw.h for FPC , but need help

    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:

    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.Handle,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;
    People being globalize, Moe being globalize, everything globalize

  2. #2

    windows mobile DDraw.h for FPC , but need help

    Direct Draw Header I use for above code, I dont know if somethings wrong or not

    Code:
    // 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.
    People being globalize, Moe being globalize, everything globalize

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •