DirectDraw.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:262k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. (*
  2.  * is the last flip finished?
  3.  *)
  4.   DDGFS_ISFLIPDONE                = $00000002;
  5.   {$EXTERNALSYM DDGFS_ISFLIPDONE}
  6. (****************************************************************************
  7.  *
  8.  * DIRECTDRAW GETBLTSTATUS FLAGS
  9.  *
  10.  ****************************************************************************)
  11. (*
  12.  * is it OK to blt now?
  13.  *)
  14.   DDGBS_CANBLT                    = $00000001;
  15.   {$EXTERNALSYM DDGBS_CANBLT}
  16. (*
  17.  * is the blt to the surface finished?
  18.  *)
  19.   DDGBS_ISBLTDONE                 = $00000002;
  20.   {$EXTERNALSYM DDGBS_ISBLTDONE}
  21. (****************************************************************************
  22.  *
  23.  * DIRECTDRAW ENUMOVERLAYZORDER FLAGS
  24.  *
  25.  ****************************************************************************)
  26. (*
  27.  * Enumerate overlays back to front.
  28.  *)
  29.   DDENUMOVERLAYZ_BACKTOFRONT      = $00000000;
  30.   {$EXTERNALSYM DDENUMOVERLAYZ_BACKTOFRONT}
  31. (*
  32.  * Enumerate overlays front to back
  33.  *)
  34.   DDENUMOVERLAYZ_FRONTTOBACK      = $00000001;
  35.   {$EXTERNALSYM DDENUMOVERLAYZ_FRONTTOBACK}
  36. (****************************************************************************
  37.  *
  38.  * DIRECTDRAW UPDATEOVERLAYZORDER FLAGS
  39.  *
  40.  ****************************************************************************)
  41. (*
  42.  * Send overlay to front
  43.  *)
  44.   DDOVERZ_SENDTOFRONT             = $00000000;
  45.   {$EXTERNALSYM DDOVERZ_SENDTOFRONT}
  46. (*
  47.  * Send overlay to back
  48.  *)
  49.   DDOVERZ_SENDTOBACK              = $00000001;
  50.   {$EXTERNALSYM DDOVERZ_SENDTOBACK}
  51. (*
  52.  * Move Overlay forward
  53.  *)
  54.   DDOVERZ_MOVEFORWARD             = $00000002;
  55.   {$EXTERNALSYM DDOVERZ_MOVEFORWARD}
  56. (*
  57.  * Move Overlay backward
  58.  *)
  59.   DDOVERZ_MOVEBACKWARD            = $00000003;
  60.   {$EXTERNALSYM DDOVERZ_MOVEBACKWARD}
  61. (*
  62.  * Move Overlay in front of relative surface
  63.  *)
  64.   DDOVERZ_INSERTINFRONTOF         = $00000004;
  65.   {$EXTERNALSYM DDOVERZ_INSERTINFRONTOF}
  66. (*
  67.  * Move Overlay in back of relative surface
  68.  *)
  69.   DDOVERZ_INSERTINBACKOF          = $00000005;
  70.   {$EXTERNALSYM DDOVERZ_INSERTINBACKOF}
  71. (****************************************************************************
  72.  *
  73.  * DIRECTDRAW SETGAMMARAMP FLAGS
  74.  *
  75.  ****************************************************************************)
  76. (*
  77.  * Request calibrator to adjust the gamma ramp according to the physical
  78.  * properties of the display so that the result should appear identical
  79.  * on all systems.
  80.  *)
  81.   DDSGR_CALIBRATE                        = $00000001;
  82.   {$EXTERNALSYM DDSGR_CALIBRATE}
  83. (****************************************************************************
  84.  *
  85.  * DIRECTDRAW STARTMODETEST FLAGS
  86.  *
  87.  ****************************************************************************)
  88. (*
  89.  * Indicates that the mode being tested has passed
  90.  *)
  91.  DDSMT_ISTESTREQUIRED                   = $00000001;
  92.  {$EXTERNALSYM DDSMT_ISTESTREQUIRED}
  93. (****************************************************************************
  94.  *
  95.  * DIRECTDRAW EVALUATEMODE FLAGS
  96.  *
  97.  ****************************************************************************)
  98. (*
  99.  * Indicates that the mode being tested has passed
  100.  *)
  101.  DDEM_MODEPASSED                        = $00000001;
  102.  {$EXTERNALSYM DDEM_MODEPASSED}
  103. (*
  104.  * Indicates that the mode being tested has failed
  105.  *)
  106.  DDEM_MODEFAILED                        = $00000002;
  107.  {$EXTERNALSYM DDEM_MODEFAILED}
  108. (*===========================================================================
  109.  *
  110.  *
  111.  * DIRECTDRAW RETURN CODES
  112.  *
  113.  * The return values from DirectDraw Commands and Surface that return an HRESULT
  114.  * are codes from DirectDraw concerning the results of the action
  115.  * requested by DirectDraw.
  116.  *
  117.  *==========================================================================*)
  118. (*
  119.  * Status is OK
  120.  *
  121.  * Issued by: DirectDraw Commands and all callbacks
  122.  *)
  123.   DD_OK                                   = 0;
  124.   {$EXTERNALSYM DD_OK}
  125.   DD_FALSE                                = S_FALSE;
  126.   {$EXTERNALSYM DD_FALSE}
  127. (****************************************************************************
  128.  *
  129.  * DIRECTDRAW ENUMCALLBACK RETURN VALUES
  130.  *
  131.  * EnumCallback returns are used to control the flow of the DIRECTDRAW and
  132.  * DIRECTDRAWSURFACE object enumerations.   They can only be returned by
  133.  * enumeration callback routines.
  134.  *
  135.  ****************************************************************************)
  136. (*
  137.  * stop the enumeration
  138.  *)
  139.   DDENUMRET_CANCEL                        = 0;
  140.   {$EXTERNALSYM DDENUMRET_CANCEL}
  141. (*
  142.  * continue the enumeration
  143.  *)
  144.   DDENUMRET_OK                            = 1;
  145.   {$EXTERNALSYM DDENUMRET_OK}
  146. (****************************************************************************
  147.  *
  148.  * DIRECTDRAW ERRORS
  149.  *
  150.  * Errors are represented by negative values and cannot be combined.
  151.  *
  152.  ****************************************************************************)
  153. const
  154.   _FACDD = $876;
  155.   {$EXTERNALSYM _FACDD}
  156.   _MAKE_DDHRESULT = HResult(1 shl 31) or HResult(_FACDD shl 16);
  157. //#define MAKE_DDHRESULT( code )  MAKE_HRESULT( 1, _FACDD, code )
  158. function MAKE_DDHRESULT(Code: DWORD): HResult;
  159. {$EXTERNALSYM MAKE_DDHRESULT}
  160. const
  161. (*
  162.  * This object is already initialized
  163.  *)
  164.   DDERR_ALREADYINITIALIZED                = HResult(_MAKE_DDHRESULT + 5);
  165.   {$EXTERNALSYM DDERR_ALREADYINITIALIZED}
  166. (*
  167.  * This surface can not be attached to the requested surface.
  168.  *)
  169.   DDERR_CANNOTATTACHSURFACE               = HResult(_MAKE_DDHRESULT + 10);
  170.   {$EXTERNALSYM DDERR_CANNOTATTACHSURFACE}
  171. (*
  172.  * This surface can not be detached from the requested surface.
  173.  *)
  174.   DDERR_CANNOTDETACHSURFACE               = HResult(_MAKE_DDHRESULT + 20);
  175.   {$EXTERNALSYM DDERR_CANNOTDETACHSURFACE}
  176. (*
  177.  * Support is currently not available.
  178.  *)
  179.   DDERR_CURRENTLYNOTAVAIL                 = HResult(_MAKE_DDHRESULT + 40);
  180.   {$EXTERNALSYM DDERR_CURRENTLYNOTAVAIL}
  181. (*
  182.  * An exception was encountered while performing the requested operation
  183.  *)
  184.   DDERR_EXCEPTION                         = HResult(_MAKE_DDHRESULT + 55);
  185.   {$EXTERNALSYM DDERR_EXCEPTION}
  186. (*
  187.  * Generic failure.
  188.  *)
  189.   DDERR_GENERIC                           = E_FAIL;
  190.   {$EXTERNALSYM DDERR_GENERIC}
  191. (*
  192.  * Height of rectangle provided is not a multiple of reqd alignment
  193.  *)
  194.   DDERR_HEIGHTALIGN                       = HResult(_MAKE_DDHRESULT + 90);
  195.   {$EXTERNALSYM DDERR_HEIGHTALIGN}
  196. (*
  197.  * Unable to match primary surface creation request with existing
  198.  * primary surface.
  199.  *)
  200.   DDERR_INCOMPATIBLEPRIMARY               = HResult(_MAKE_DDHRESULT + 95);
  201.   {$EXTERNALSYM DDERR_INCOMPATIBLEPRIMARY}
  202. (*
  203.  * One or more of the caps bits passed to the callback are incorrect.
  204.  *)
  205.   DDERR_INVALIDCAPS                       = HResult(_MAKE_DDHRESULT + 100);
  206.   {$EXTERNALSYM DDERR_INVALIDCAPS}
  207. (*
  208.  * DirectDraw does not support provided Cliplist.
  209.  *)
  210.   DDERR_INVALIDCLIPLIST                   = HResult(_MAKE_DDHRESULT + 110);
  211.   {$EXTERNALSYM DDERR_INVALIDCLIPLIST}
  212. (*
  213.  * DirectDraw does not support the requested mode
  214.  *)
  215.   DDERR_INVALIDMODE                       = HResult(_MAKE_DDHRESULT + 120);
  216.   {$EXTERNALSYM DDERR_INVALIDMODE}
  217. (*
  218.  * DirectDraw received a pointer that was an invalid DIRECTDRAW object.
  219.  *)
  220.   DDERR_INVALIDOBJECT                     = HResult(_MAKE_DDHRESULT + 130);
  221.   {$EXTERNALSYM DDERR_INVALIDOBJECT}
  222. (*
  223.  * One or more of the parameters passed to the callback function are
  224.  * incorrect.
  225.  *)
  226.   DDERR_INVALIDPARAMS                     = E_INVALIDARG;
  227.   {$EXTERNALSYM DDERR_INVALIDPARAMS}
  228. (*
  229.  * pixel format was invalid as specified
  230.  *)
  231.   DDERR_INVALIDPIXELFORMAT                = HResult(_MAKE_DDHRESULT + 145);
  232.   {$EXTERNALSYM DDERR_INVALIDPIXELFORMAT}
  233. (*
  234.  * Rectangle provided was invalid.
  235.  *)
  236.   DDERR_INVALIDRECT                       = HResult(_MAKE_DDHRESULT + 150);
  237.   {$EXTERNALSYM DDERR_INVALIDRECT}
  238. (*
  239.  * Operation could not be carried out because one or more surfaces are locked
  240.  *)
  241.   DDERR_LOCKEDSURFACES                    = HResult(_MAKE_DDHRESULT + 160);
  242.   {$EXTERNALSYM DDERR_LOCKEDSURFACES}
  243. (*
  244.  * There is no 3D present.
  245.  *)
  246.   DDERR_NO3D                              = HResult(_MAKE_DDHRESULT + 170);
  247.   {$EXTERNALSYM DDERR_NO3D}
  248. (*
  249.  * Operation could not be carried out because there is no alpha accleration
  250.  * hardware present or available.
  251.  *)
  252.   DDERR_NOALPHAHW                         = HResult(_MAKE_DDHRESULT + 180);
  253.   {$EXTERNALSYM DDERR_NOALPHAHW}
  254. (*
  255.  * Operation could not be carried out because there is no stereo
  256.  * hardware present or available.
  257.  *)
  258.   DDERR_NOSTEREOHARDWARE                  = HResult(_MAKE_DDHRESULT + 181);
  259.   {$EXTERNALSYM DDERR_NOSTEREOHARDWARE}
  260. (*
  261.  * Operation could not be carried out because there is no hardware
  262.  * present which supports stereo surfaces
  263.  *)
  264.   DDERR_NOSURFACELEFT                     = HResult(_MAKE_DDHRESULT + 182);
  265.   {$EXTERNALSYM DDERR_NOSURFACELEFT}
  266. (*
  267.  * no clip list available
  268.  *)
  269.   DDERR_NOCLIPLIST                        = HResult(_MAKE_DDHRESULT + 205);
  270.   {$EXTERNALSYM DDERR_NOCLIPLIST}
  271. (*
  272.  * Operation could not be carried out because there is no color conversion
  273.  * hardware present or available.
  274.  *)
  275.   DDERR_NOCOLORCONVHW                     = HResult(_MAKE_DDHRESULT + 210);
  276.   {$EXTERNALSYM DDERR_NOCOLORCONVHW}
  277. (*
  278.  * Create function called without DirectDraw object method SetCooperativeLevel
  279.  * being called.
  280.  *)
  281.   DDERR_NOCOOPERATIVELEVELSET             = HResult(_MAKE_DDHRESULT + 212);
  282.   {$EXTERNALSYM DDERR_NOCOOPERATIVELEVELSET}
  283. (*
  284.  * Surface doesn't currently have a color key
  285.  *)
  286.   DDERR_NOCOLORKEY                        = HResult(_MAKE_DDHRESULT + 215);
  287.   {$EXTERNALSYM DDERR_NOCOLORKEY}
  288. (*
  289.  * Operation could not be carried out because there is no hardware support
  290.  * of the dest color key.
  291.  *)
  292.   DDERR_NOCOLORKEYHW                      = HResult(_MAKE_DDHRESULT + 220);
  293.   {$EXTERNALSYM DDERR_NOCOLORKEYHW}
  294. (*
  295.  * No DirectDraw support possible with current display driver
  296.  *)
  297.   DDERR_NODIRECTDRAWSUPPORT               = HResult(_MAKE_DDHRESULT + 222);
  298.   {$EXTERNALSYM DDERR_NODIRECTDRAWSUPPORT}
  299. (*
  300.  * Operation requires the application to have exclusive mode but the
  301.  * application does not have exclusive mode.
  302.  *)
  303.   DDERR_NOEXCLUSIVEMODE                   = HResult(_MAKE_DDHRESULT + 225);
  304.   {$EXTERNALSYM DDERR_NOEXCLUSIVEMODE}
  305. (*
  306.  * Flipping visible surfaces is not supported.
  307.  *)
  308.   DDERR_NOFLIPHW                          = HResult(_MAKE_DDHRESULT + 230);
  309.   {$EXTERNALSYM DDERR_NOFLIPHW}
  310. (*
  311.  * There is no GDI present.
  312.  *)
  313.   DDERR_NOGDI                             = HResult(_MAKE_DDHRESULT + 240);
  314.   {$EXTERNALSYM DDERR_NOGDI}
  315. (*
  316.  * Operation could not be carried out because there is no hardware present
  317.  * or available.
  318.  *)
  319.   DDERR_NOMIRRORHW                        = HResult(_MAKE_DDHRESULT + 250);
  320.   {$EXTERNALSYM DDERR_NOMIRRORHW}
  321. (*
  322.  * Requested item was not found
  323.  *)
  324.   DDERR_NOTFOUND                          = HResult(_MAKE_DDHRESULT + 255);
  325.   {$EXTERNALSYM DDERR_NOTFOUND}
  326. (*
  327.  * Operation could not be carried out because there is no overlay hardware
  328.  * present or available.
  329.  *)
  330.   DDERR_NOOVERLAYHW                       = HResult(_MAKE_DDHRESULT + 260);
  331.   {$EXTERNALSYM DDERR_NOOVERLAYHW}
  332. (*
  333.  * Operation could not be carried out because the source and destination
  334.  * rectangles are on the same surface and overlap each other.
  335.  *)
  336.   DDERR_OVERLAPPINGRECTS                  = HResult(_MAKE_DDHRESULT + 270);
  337.   {$EXTERNALSYM DDERR_OVERLAPPINGRECTS}
  338. (*
  339.  * Operation could not be carried out because there is no appropriate raster
  340.  * op hardware present or available.
  341.  *)
  342.   DDERR_NORASTEROPHW                      = HResult(_MAKE_DDHRESULT + 280);
  343.   {$EXTERNALSYM DDERR_NORASTEROPHW}
  344. (*
  345.  * Operation could not be carried out because there is no rotation hardware
  346.  * present or available.
  347.  *)
  348.   DDERR_NOROTATIONHW                      = HResult(_MAKE_DDHRESULT + 290);
  349.   {$EXTERNALSYM DDERR_NOROTATIONHW}
  350. (*
  351.  * Operation could not be carried out because there is no hardware support
  352.  * for stretching
  353.  *)
  354.   DDERR_NOSTRETCHHW                       = HResult(_MAKE_DDHRESULT + 310);
  355.   {$EXTERNALSYM DDERR_NOSTRETCHHW}
  356. (*
  357.  * DirectDrawSurface is not in 4 bit color palette and the requested operation
  358.  * requires 4 bit color palette.
  359.  *)
  360.   DDERR_NOT4BITCOLOR                      = HResult(_MAKE_DDHRESULT + 316);
  361.   {$EXTERNALSYM DDERR_NOT4BITCOLOR}
  362. (*
  363.  * DirectDrawSurface is not in 4 bit color index palette and the requested
  364.  * operation requires 4 bit color index palette.
  365.  *)
  366.   DDERR_NOT4BITCOLORINDEX                 = HResult(_MAKE_DDHRESULT + 317);
  367.   {$EXTERNALSYM DDERR_NOT4BITCOLORINDEX}
  368. (*
  369.  * DirectDraw Surface is not in 8 bit color mode and the requested operation
  370.  * requires 8 bit color.
  371.  *)
  372.   DDERR_NOT8BITCOLOR                      = HResult(_MAKE_DDHRESULT + 320);
  373.   {$EXTERNALSYM DDERR_NOT8BITCOLOR}
  374. (*
  375.  * Operation could not be carried out because there is no texture mapping
  376.  * hardware present or available.
  377.  *)
  378.   DDERR_NOTEXTUREHW                       = HResult(_MAKE_DDHRESULT + 330);
  379.   {$EXTERNALSYM DDERR_NOTEXTUREHW}
  380. (*
  381.  * Operation could not be carried out because there is no hardware support
  382.  * for vertical blank synchronized operations.
  383.  *)
  384.   DDERR_NOVSYNCHW                         = HResult(_MAKE_DDHRESULT + 335);
  385.   {$EXTERNALSYM DDERR_NOVSYNCHW}
  386. (*
  387.  * Operation could not be carried out because there is no hardware support
  388.  * for zbuffer blting.
  389.  *)
  390.   DDERR_NOZBUFFERHW                       = HResult(_MAKE_DDHRESULT + 340);
  391.   {$EXTERNALSYM DDERR_NOZBUFFERHW}
  392. (*
  393.  * Overlay surfaces could not be z layered based on their BltOrder because
  394.  * the hardware does not support z layering of overlays.
  395.  *)
  396.   DDERR_NOZOVERLAYHW                      = HResult(_MAKE_DDHRESULT + 350);
  397.   {$EXTERNALSYM DDERR_NOZOVERLAYHW}
  398. (*
  399.  * The hardware needed for the requested operation has already been
  400.  * allocated.
  401.  *)
  402.   DDERR_OUTOFCAPS                         = HResult(_MAKE_DDHRESULT + 360);
  403.   {$EXTERNALSYM DDERR_OUTOFCAPS}
  404. (*
  405.  * DirectDraw does not have enough memory to perform the operation.
  406.  *)
  407.   DDERR_OUTOFMEMORY                       = E_OUTOFMEMORY;
  408.   {$EXTERNALSYM DDERR_OUTOFMEMORY}
  409. (*
  410.  * DirectDraw does not have enough memory to perform the operation.
  411.  *)
  412.   DDERR_OUTOFVIDEOMEMORY                  = HResult(_MAKE_DDHRESULT + 380);
  413.   {$EXTERNALSYM DDERR_OUTOFVIDEOMEMORY}
  414. (*
  415.  * hardware does not support clipped overlays
  416.  *)
  417.   DDERR_OVERLAYCANTCLIP                   = HResult(_MAKE_DDHRESULT + 382);
  418.   {$EXTERNALSYM DDERR_OVERLAYCANTCLIP}
  419. (*
  420.  * Can only have ony color key active at one time for overlays
  421.  *)
  422.   DDERR_OVERLAYCOLORKEYONLYONEACTIVE      = HResult(_MAKE_DDHRESULT + 384);
  423.   {$EXTERNALSYM DDERR_OVERLAYCOLORKEYONLYONEACTIVE}
  424. (*
  425.  * Access to this palette is being refused because the palette is already
  426.  * locked by another thread.
  427.  *)
  428.   DDERR_PALETTEBUSY                       = HResult(_MAKE_DDHRESULT + 387);
  429.   {$EXTERNALSYM DDERR_PALETTEBUSY}
  430. (*
  431.  * No src color key specified for this operation.
  432.  *)
  433.   DDERR_COLORKEYNOTSET                    = HResult(_MAKE_DDHRESULT + 400);
  434.   {$EXTERNALSYM DDERR_COLORKEYNOTSET}
  435. (*
  436.  * This surface is already attached to the surface it is being attached to.
  437.  *)
  438.   DDERR_SURFACEALREADYATTACHED            = HResult(_MAKE_DDHRESULT + 410);
  439.   {$EXTERNALSYM DDERR_SURFACEALREADYATTACHED}
  440. (*
  441.  * This surface is already a dependency of the surface it is being made a
  442.  * dependency of.
  443.  *)
  444.   DDERR_SURFACEALREADYDEPENDENT           = HResult(_MAKE_DDHRESULT + 420);
  445.   {$EXTERNALSYM DDERR_SURFACEALREADYDEPENDENT}
  446. (*
  447.  * Access to this surface is being refused because the surface is already
  448.  * locked by another thread.
  449.  *)
  450.   DDERR_SURFACEBUSY                       = HResult(_MAKE_DDHRESULT + 430);
  451.   {$EXTERNALSYM DDERR_SURFACEBUSY}
  452. (*
  453.  * Access to this surface is being refused because no driver exists
  454.  * which can supply a pointer to the surface.
  455.  * This is most likely to happen when attempting to lock the primary
  456.  * surface when no DCI provider is present.
  457.  * Will also happen on attempts to lock an optimized surface.
  458.  *)
  459.   DDERR_CANTLOCKSURFACE                   = HResult(_MAKE_DDHRESULT + 435);
  460.   {$EXTERNALSYM DDERR_CANTLOCKSURFACE}
  461. (*
  462.  * Access to Surface refused because Surface is obscured.
  463.  *)
  464.   DDERR_SURFACEISOBSCURED                 = HResult(_MAKE_DDHRESULT + 440);
  465.   {$EXTERNALSYM DDERR_SURFACEISOBSCURED}
  466. (*
  467.  * Access to this surface is being refused because the surface is gone.
  468.  * The DIRECTDRAWSURFACE object representing this surface should
  469.  * have Restore called on it.
  470.  *)
  471.   DDERR_SURFACELOST                       = HResult(_MAKE_DDHRESULT + 450);
  472.   {$EXTERNALSYM DDERR_SURFACELOST}
  473. (*
  474.  * The requested surface is not attached.
  475.  *)
  476.   DDERR_SURFACENOTATTACHED                = HResult(_MAKE_DDHRESULT + 460);
  477.   {$EXTERNALSYM DDERR_SURFACENOTATTACHED}
  478. (*
  479.  * Height requested by DirectDraw is too large.
  480.  *)
  481.   DDERR_TOOBIGHEIGHT                      = HResult(_MAKE_DDHRESULT + 470);
  482.   {$EXTERNALSYM DDERR_TOOBIGHEIGHT}
  483. (*
  484.  * Size requested by DirectDraw is too large --  The individual height and
  485.  * width are OK.
  486.  *)
  487.   DDERR_TOOBIGSIZE                        = HResult(_MAKE_DDHRESULT + 480);
  488.   {$EXTERNALSYM DDERR_TOOBIGSIZE}
  489. (*
  490.  * Width requested by DirectDraw is too large.
  491.  *)
  492.   DDERR_TOOBIGWIDTH                       = HResult(_MAKE_DDHRESULT + 490);
  493.   {$EXTERNALSYM DDERR_TOOBIGWIDTH}
  494. (*
  495.  * Action not supported.
  496.  *)
  497.   DDERR_UNSUPPORTED                       = E_NOTIMPL;
  498.   {$EXTERNALSYM DDERR_UNSUPPORTED}
  499. (*
  500.  * FOURCC format requested is unsupported by DirectDraw
  501.  *)
  502.   DDERR_UNSUPPORTEDFORMAT                 = HResult(_MAKE_DDHRESULT + 510);
  503.   {$EXTERNALSYM DDERR_UNSUPPORTEDFORMAT}
  504. (*
  505.  * Bitmask in the pixel format requested is unsupported by DirectDraw
  506.  *)
  507.   DDERR_UNSUPPORTEDMASK                   = HResult(_MAKE_DDHRESULT + 520);
  508.   {$EXTERNALSYM DDERR_UNSUPPORTEDMASK}
  509. (*
  510.  * The specified stream contains invalid data
  511.  *)
  512.   DDERR_INVALIDSTREAM                     = HResult(_MAKE_DDHRESULT + 521);
  513.   {$EXTERNALSYM DDERR_INVALIDSTREAM}
  514. (*
  515.  * vertical blank is in progress
  516.  *)
  517.   DDERR_VERTICALBLANKINPROGRESS           = HResult(_MAKE_DDHRESULT + 537);
  518.   {$EXTERNALSYM DDERR_VERTICALBLANKINPROGRESS}
  519. (*
  520.  * Informs DirectDraw that the previous Blt which is transfering information
  521.  * to or from this Surface is incomplete.
  522.  *)
  523.   DDERR_WASSTILLDRAWING                   = HResult(_MAKE_DDHRESULT + 540);
  524.   {$EXTERNALSYM DDERR_WASSTILLDRAWING}
  525. (*
  526.  * The specified surface type requires specification of the COMPLEX flag
  527.  *)
  528.   DDERR_DDSCAPSCOMPLEXREQUIRED            = HResult(_MAKE_DDHRESULT + 542);
  529.   {$EXTERNALSYM DDERR_DDSCAPSCOMPLEXREQUIRED}
  530. (*
  531.  * Rectangle provided was not horizontally aligned on reqd. boundary
  532.  *)
  533.   DDERR_XALIGN                            = HResult(_MAKE_DDHRESULT + 560);
  534.   {$EXTERNALSYM DDERR_XALIGN}
  535. (*
  536.  * The GUID passed to DirectDrawCreate is not a valid DirectDraw driver
  537.  * identifier.
  538.  *)
  539.   DDERR_INVALIDDIRECTDRAWGUID             = HResult(_MAKE_DDHRESULT + 561);
  540.   {$EXTERNALSYM DDERR_INVALIDDIRECTDRAWGUID}
  541. (*
  542.  * A DirectDraw object representing this driver has already been created
  543.  * for this process.
  544.  *)
  545.   DDERR_DIRECTDRAWALREADYCREATED          = HResult(_MAKE_DDHRESULT + 562);
  546.   {$EXTERNALSYM DDERR_DIRECTDRAWALREADYCREATED}
  547. (*
  548.  * A hardware only DirectDraw object creation was attempted but the driver
  549.  * did not support any hardware.
  550.  *)
  551.   DDERR_NODIRECTDRAWHW                    = HResult(_MAKE_DDHRESULT + 563);
  552.   {$EXTERNALSYM DDERR_NODIRECTDRAWHW}
  553. (*
  554.  * this process already has created a primary surface
  555.  *)
  556.   DDERR_PRIMARYSURFACEALREADYEXISTS       = HResult(_MAKE_DDHRESULT + 564);
  557.   {$EXTERNALSYM DDERR_PRIMARYSURFACEALREADYEXISTS}
  558. (*
  559.  * software emulation not available.
  560.  *)
  561.   DDERR_NOEMULATION                       = HResult(_MAKE_DDHRESULT + 565);
  562.   {$EXTERNALSYM DDERR_NOEMULATION}
  563. (*
  564.  * region passed to Clipper::GetClipList is too small.
  565.  *)
  566.   DDERR_REGIONTOOSMALL                    = HResult(_MAKE_DDHRESULT + 566);
  567.   {$EXTERNALSYM DDERR_REGIONTOOSMALL}
  568. (*
  569.  * an attempt was made to set a clip list for a clipper objec that
  570.  * is already monitoring an hwnd.
  571.  *)
  572.   DDERR_CLIPPERISUSINGHWND                = HResult(_MAKE_DDHRESULT + 567);
  573.   {$EXTERNALSYM DDERR_CLIPPERISUSINGHWND}
  574. (*
  575.  * No clipper object attached to surface object
  576.  *)
  577.   DDERR_NOCLIPPERATTACHED                 = HResult(_MAKE_DDHRESULT + 568);
  578.   {$EXTERNALSYM DDERR_NOCLIPPERATTACHED}
  579. (*
  580.  * Clipper notification requires an HWND or
  581.  * no HWND has previously been set as the CooperativeLevel HWND.
  582.  *)
  583.   DDERR_NOHWND                            = HResult(_MAKE_DDHRESULT + 569);
  584.   {$EXTERNALSYM DDERR_NOHWND}
  585. (*
  586.  * HWND used by DirectDraw CooperativeLevel has been subclassed,
  587.  * this prevents DirectDraw from restoring state.
  588.  *)
  589.   DDERR_HWNDSUBCLASSED                    = HResult(_MAKE_DDHRESULT + 570);
  590.   {$EXTERNALSYM DDERR_HWNDSUBCLASSED}
  591. (*
  592.  * The CooperativeLevel HWND has already been set.
  593.  * It can not be reset while the process has surfaces or palettes created.
  594.  *)
  595.   DDERR_HWNDALREADYSET                    = HResult(_MAKE_DDHRESULT + 571);
  596.   {$EXTERNALSYM DDERR_HWNDALREADYSET}
  597. (*
  598.  * No palette object attached to this surface.
  599.  *)
  600.   DDERR_NOPALETTEATTACHED                 = HResult(_MAKE_DDHRESULT + 572);
  601.   {$EXTERNALSYM DDERR_NOPALETTEATTACHED}
  602. (*
  603.  * No hardware support for 16 or 256 color palettes.
  604.  *)
  605.   DDERR_NOPALETTEHW                       = HResult(_MAKE_DDHRESULT + 573);
  606.   {$EXTERNALSYM DDERR_NOPALETTEHW}
  607. (*
  608.  * If a clipper object is attached to the source surface passed into a
  609.  * BltFast call.
  610.  *)
  611.   DDERR_BLTFASTCANTCLIP                   = HResult(_MAKE_DDHRESULT + 574);
  612.   {$EXTERNALSYM DDERR_BLTFASTCANTCLIP}
  613. (*
  614.  * No blter.
  615.  *)
  616.   DDERR_NOBLTHW                           = HResult(_MAKE_DDHRESULT + 575);
  617.   {$EXTERNALSYM DDERR_NOBLTHW}
  618. (*
  619.  * No DirectDraw ROP hardware.
  620.  *)
  621.   DDERR_NODDROPSHW                        = HResult(_MAKE_DDHRESULT + 576);
  622.   {$EXTERNALSYM DDERR_NODDROPSHW}
  623. (*
  624.  * returned when GetOverlayPosition is called on a hidden overlay
  625.  *)
  626.   DDERR_OVERLAYNOTVISIBLE                 = HResult(_MAKE_DDHRESULT + 577);
  627.   {$EXTERNALSYM DDERR_OVERLAYNOTVISIBLE}
  628. (*
  629.  * returned when GetOverlayPosition is called on a overlay that UpdateOverlay
  630.  * has never been called on to establish a destionation.
  631.  *)
  632.   DDERR_NOOVERLAYDEST                     = HResult(_MAKE_DDHRESULT + 578);
  633.   {$EXTERNALSYM DDERR_NOOVERLAYDEST}
  634. (*
  635.  * returned when the position of the overlay on the destionation is no longer
  636.  * legal for that destionation.
  637.  *)
  638.   DDERR_INVALIDPOSITION                   = HResult(_MAKE_DDHRESULT + 579);
  639.   {$EXTERNALSYM DDERR_INVALIDPOSITION}
  640. (*
  641.  * returned when an overlay member is called for a non-overlay surface
  642.  *)
  643.   DDERR_NOTAOVERLAYSURFACE                = HResult(_MAKE_DDHRESULT + 580);
  644.   {$EXTERNALSYM DDERR_NOTAOVERLAYSURFACE}
  645. (*
  646.  * An attempt was made to set the cooperative level when it was already
  647.  * set to exclusive.
  648.  *)
  649.   DDERR_EXCLUSIVEMODEALREADYSET           = HResult(_MAKE_DDHRESULT + 581);
  650.   {$EXTERNALSYM DDERR_EXCLUSIVEMODEALREADYSET}
  651. (*
  652.  * An attempt has been made to flip a surface that is not flippable.
  653.  *)
  654.   DDERR_NOTFLIPPABLE                      = HResult(_MAKE_DDHRESULT + 582);
  655.   {$EXTERNALSYM DDERR_NOTFLIPPABLE}
  656. (*
  657.  * Can't duplicate primary & 3D surfaces, or surfaces that are implicitly
  658.  * created.
  659.  *)
  660.   DDERR_CANTDUPLICATE                     = HResult(_MAKE_DDHRESULT + 583);
  661.   {$EXTERNALSYM DDERR_CANTDUPLICATE}
  662. (*
  663.  * Surface was not locked.  An attempt to unlock a surface that was not
  664.  * locked at all, or by this process, has been attempted.
  665.  *)
  666.   DDERR_NOTLOCKED                         = HResult(_MAKE_DDHRESULT + 584);
  667.   {$EXTERNALSYM DDERR_NOTLOCKED}
  668. (*
  669.  * Windows can not create any more DCs, or a DC was requested for a paltte-indexed
  670.  * surface when the surface had no palette AND the display mode was not palette-indexed
  671.  * (in this case DirectDraw cannot select a proper palette into the DC)
  672.  *)
  673.   DDERR_CANTCREATEDC                      = HResult(_MAKE_DDHRESULT + 585);
  674.   {$EXTERNALSYM DDERR_CANTCREATEDC}
  675. (*
  676.  * No DC was ever created for this surface.
  677.  *)
  678.   DDERR_NODC                              = HResult(_MAKE_DDHRESULT + 586);
  679.   {$EXTERNALSYM DDERR_NODC}
  680. (*
  681.  * This surface can not be restored because it was created in a different
  682.  * mode.
  683.  *)
  684.   DDERR_WRONGMODE                         = HResult(_MAKE_DDHRESULT + 587);
  685.   {$EXTERNALSYM DDERR_WRONGMODE}
  686. (*
  687.  * This surface can not be restored because it is an implicitly created
  688.  * surface.
  689.  *)
  690.   DDERR_IMPLICITLYCREATED                 = HResult(_MAKE_DDHRESULT + 588);
  691.   {$EXTERNALSYM DDERR_IMPLICITLYCREATED}
  692. (*
  693.  * The surface being used is not a palette-based surface
  694.  *)
  695.   DDERR_NOTPALETTIZED                     = HResult(_MAKE_DDHRESULT + 589);
  696.   {$EXTERNALSYM DDERR_NOTPALETTIZED}
  697. (*
  698.  * The display is currently in an unsupported mode
  699.  *)
  700.   DDERR_UNSUPPORTEDMODE                   = HResult(_MAKE_DDHRESULT + 590);
  701.   {$EXTERNALSYM DDERR_UNSUPPORTEDMODE}
  702. (*
  703.  * Operation could not be carried out because there is no mip-map
  704.  * texture mapping hardware present or available.
  705.  *)
  706.   DDERR_NOMIPMAPHW                        = HResult(_MAKE_DDHRESULT + 591);
  707.   {$EXTERNALSYM DDERR_NOMIPMAPHW}
  708. (*
  709.  * The requested action could not be performed because the surface was of
  710.  * the wrong type.
  711.  *)
  712.   DDERR_INVALIDSURFACETYPE                = HResult(_MAKE_DDHRESULT + 592);
  713.   {$EXTERNALSYM DDERR_INVALIDSURFACETYPE}
  714. (*
  715.  * Device does not support optimized surfaces, therefore no video memory optimized surfaces
  716.  *)
  717.   DDERR_NOOPTIMIZEHW                      = HResult(_MAKE_DDHRESULT + 600);
  718.   {$EXTERNALSYM DDERR_NOOPTIMIZEHW}
  719. (*
  720.  * Surface is an optimized surface, but has not yet been allocated any memory
  721.  *)
  722.   DDERR_NOTLOADED                         = HResult(_MAKE_DDHRESULT + 601);
  723.   {$EXTERNALSYM DDERR_NOTLOADED}
  724. (*
  725.  * Attempt was made to create or set a device window without first setting
  726.  * the focus window
  727.  *)
  728.   DDERR_NOFOCUSWINDOW                     = HResult(_MAKE_DDHRESULT + 602);
  729.   {$EXTERNALSYM DDERR_NOFOCUSWINDOW}
  730. (*
  731.  * Attempt was made to set a palette on a mipmap sublevel
  732.  *)
  733.   DDERR_NOTONMIPMAPSUBLEVEL               = HResult(_MAKE_DDHRESULT + 603);
  734.   {$EXTERNALSYM DDERR_NOTONMIPMAPSUBLEVEL}
  735. (*
  736.  * A DC has already been returned for this surface. Only one DC can be
  737.  * retrieved per surface.
  738.  *)
  739.   DDERR_DCALREADYCREATED                  = HResult(_MAKE_DDHRESULT + 620);
  740.   {$EXTERNALSYM DDERR_DCALREADYCREATED}
  741. (*
  742.  * An attempt was made to allocate non-local video memory from a device
  743.  * that does not support non-local video memory.
  744.  *)
  745.   DDERR_NONONLOCALVIDMEM                  = HResult(_MAKE_DDHRESULT + 630);
  746.   {$EXTERNALSYM DDERR_NONONLOCALVIDMEM}
  747. (*
  748.  * The attempt to page lock a surface failed.
  749.  *)
  750.   DDERR_CANTPAGELOCK                      = HResult(_MAKE_DDHRESULT + 640);
  751.   {$EXTERNALSYM DDERR_CANTPAGELOCK}
  752. (*
  753.  * The attempt to page unlock a surface failed.
  754.  *)
  755.   DDERR_CANTPAGEUNLOCK                    = HResult(_MAKE_DDHRESULT + 660);
  756.   {$EXTERNALSYM DDERR_CANTPAGEUNLOCK}
  757. (*
  758.  * An attempt was made to page unlock a surface with no outstanding page locks.
  759.  *)
  760.   DDERR_NOTPAGELOCKED                     = HResult(_MAKE_DDHRESULT + 680);
  761.   {$EXTERNALSYM DDERR_NOTPAGELOCKED}
  762. (*
  763.  * There is more data available than the specified buffer size could hold
  764.  *)
  765.   DDERR_MOREDATA                          = HResult(_MAKE_DDHRESULT + 690);
  766.   {$EXTERNALSYM DDERR_MOREDATA}
  767. (*
  768.  * The data has expired and is therefore no longer valid.
  769.  *)
  770.   DDERR_EXPIRED                           = HResult(_MAKE_DDHRESULT + 691);
  771.   {$EXTERNALSYM DDERR_EXPIRED}
  772. (*
  773.  * The mode test has finished executing.
  774.  *)
  775.  DDERR_TESTFINISHED                       = HResult(_MAKE_DDHRESULT + 692);
  776.  {$EXTERNALSYM DDERR_TESTFINISHED}
  777. (*
  778.  * The mode test has switched to a new mode.
  779.  *)
  780.  DDERR_NEWMODE                            = HResult(_MAKE_DDHRESULT + 693);
  781.  {$EXTERNALSYM DDERR_NEWMODE}
  782. (*
  783.  * D3D has not yet been initialized.
  784.  *)
  785.  DDERR_D3DNOTINITIALIZED                  = HResult(_MAKE_DDHRESULT + 694);
  786.  {$EXTERNALSYM DDERR_D3DNOTINITIALIZED}
  787. (*
  788.  * The video port is not active
  789.  *)
  790.   DDERR_VIDEONOTACTIVE                    = HResult(_MAKE_DDHRESULT + 695);
  791.   {$EXTERNALSYM DDERR_VIDEONOTACTIVE}
  792. (*
  793.  * The monitor does not have EDID data.
  794.  *)
  795.  DDERR_NOMONITORINFORMATION               = HResult(_MAKE_DDHRESULT + 696);
  796.  {$EXTERNALSYM DDERR_NOMONITORINFORMATION}
  797. (*
  798.  * The driver does not enumerate display mode refresh rates.
  799.  *)
  800.  DDERR_NODRIVERSUPPORT                    = HResult(_MAKE_DDHRESULT + 697);
  801.  {$EXTERNALSYM DDERR_NODRIVERSUPPORT}
  802. (*
  803.  * Surfaces created by one direct draw device cannot be used directly by
  804.  * another direct draw device.
  805.  *)
  806.   DDERR_DEVICEDOESNTOWNSURFACE            = HResult(_MAKE_DDHRESULT + 699);
  807.   {$EXTERNALSYM DDERR_DEVICEDOESNTOWNSURFACE}
  808. (*
  809.  * An attempt was made to invoke an interface member of a DirectDraw object
  810.  * created by CoCreateInstance() before it was initialized.
  811.  *)
  812.   DDERR_NOTINITIALIZED                    = CO_E_NOTINITIALIZED;
  813.   {$EXTERNALSYM DDERR_NOTINITIALIZED}
  814. (* Alpha bit depth constants *)
  815. (*
  816.  * API's
  817.  *)
  818. const
  819.   DirectDrawDll = 'ddraw.dll';
  820. type
  821.   HMonitor = THandle;
  822.   {$EXTERNALSYM HMonitor}
  823.   TDDEnumCallbackA = function (lpGUID: PGUID; lpDriverDescription: PAnsiChar;
  824.       lpDriverName: PAnsiChar; lpContext: Pointer): BOOL; stdcall;
  825.   {$EXTERNALSYM TDDEnumCallbackA}
  826.   TDDEnumCallbackW = function (lpGUID: PGUID; lpDriverDescription: PWideChar;
  827.       lpDriverName: PWideChar; lpContext: Pointer): BOOL; stdcall;
  828.   {$EXTERNALSYM TDDEnumCallbackW}
  829.   TDDEnumCallback = function (lpGUID: PGUID; lpDriverDescription: PChar;
  830.       lpDriverName: PChar; lpContext: Pointer): BOOL; stdcall;
  831.   {$EXTERNALSYM TDDEnumCallback}
  832.   TDDEnumCallbackExA = function (lpGUID: PGUID; lpDriverDescription: PAnsiChar;
  833.       lpDriverName: PAnsiChar; lpContext: Pointer; Monitor: HMonitor): BOOL;
  834.       stdcall;
  835.   {$EXTERNALSYM TDDEnumCallbackExA}
  836.   TDDEnumCallbackExW = function (lpGUID: PGUID; lpDriverDescription: PWideChar;
  837.       lpDriverName: PWideChar; lpContext: Pointer; Monitor: HMonitor): BOOL;
  838.       stdcall;
  839.   {$EXTERNALSYM TDDEnumCallbackExW}
  840.   TDDEnumCallbackEx = function (lpGUID: PGUID; lpDriverDescription: PChar;
  841.       lpDriverName: PChar; lpContext: Pointer; Monitor: HMonitor): BOOL;
  842.       stdcall;
  843.   {$EXTERNALSYM TDDEnumCallbackEx}
  844. function DirectDrawLoaded: Boolean;
  845. function UnLoadDirectDraw: Boolean;
  846. function LoadDirectDraw: Boolean;
  847. {$IFDEF DIRECTDRAW_DYNAMIC_LINK}
  848. var
  849.   DirectDrawEnumerateA : function (lpCallback: TDDEnumCallbackA;
  850.        lpContext: Pointer): HResult; stdcall;
  851.   {$EXTERNALSYM DirectDrawEnumerateA}
  852.   DirectDrawEnumerateW : function (lpCallback: TDDEnumCallbackW;
  853.        lpContext: Pointer): HResult; stdcall;
  854.   {$EXTERNALSYM DirectDrawEnumerateW}
  855.   DirectDrawEnumerate  : function (lpCallback: TDDEnumCallback;
  856.        lpContext: Pointer): HResult; stdcall;
  857.   {$EXTERNALSYM DirectDrawEnumerate}
  858.   DirectDrawEnumerateExA : function (lpCallback: TDDEnumCallbackExA;
  859.        lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
  860.   {$EXTERNALSYM DirectDrawEnumerateExA}
  861.   DirectDrawEnumerateExW : function (lpCallback: TDDEnumCallbackExW;
  862.        lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
  863.   {$EXTERNALSYM DirectDrawEnumerateExW}
  864.   DirectDrawEnumerateEx  : function (lpCallback: TDDEnumCallbackEx;
  865.        lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
  866.   {$EXTERNALSYM DirectDrawEnumerateEx}
  867.   DirectDrawCreate : function (lpGUID: PGUID;
  868.        out lplpDD: IDirectDraw;
  869.        pUnkOuter: IUnknown): HResult; stdcall;
  870.   {$EXTERNALSYM DirectDrawCreate}
  871.   DirectDrawCreateEx : function  (lpGUID: PGUID;
  872.        out lplpDD: IDirectDraw7; const iid: TGUID;
  873.        pUnkOuter: IUnknown): HResult; stdcall;
  874.   {$EXTERNALSYM DirectDrawCreateEx}
  875.   DirectDrawCreateClipper : function (dwFlags: DWORD;
  876.        out lplpDDClipper: IDirectDrawClipper;
  877.        pUnkOuter: IUnknown): HResult; stdcall;
  878.   {$EXTERNALSYM DirectDrawCreateClipper}
  879. {$ELSE}
  880. function DirectDrawEnumerateA(lpCallback: TDDEnumCallbackA; lpContext: Pointer): HResult; stdcall; external DirectDrawDll;
  881. {$EXTERNALSYM DirectDrawEnumerateA}
  882. function DirectDrawEnumerateW(lpCallback: TDDEnumCallbackW; lpContext: Pointer): HResult; stdcall; external DirectDrawDll;
  883. {$EXTERNALSYM DirectDrawEnumerateW}
  884. function DirectDrawEnumerate(lpCallback: TDDEnumCallback; lpContext: Pointer): HResult; stdcall;
  885.   external DirectDrawDll name {$IFDEF UNICODE}'DirectDrawEnumerateW'{$ELSE}'DirectDrawEnumerateA'{$ENDIF};
  886. {$EXTERNALSYM DirectDrawEnumerate}
  887. function DirectDrawEnumerateExA(lpCallback: TDDEnumCallbackExA; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall; external DirectDrawDll;
  888. {$EXTERNALSYM DirectDrawEnumerateExA}
  889. function DirectDrawEnumerateExW(lpCallback: TDDEnumCallbackExW; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall; external DirectDrawDll;
  890. {$EXTERNALSYM DirectDrawEnumerateExW}
  891. function DirectDrawEnumerateEx(lpCallback: TDDEnumCallbackEx; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
  892.   external DirectDrawDll name {$IFDEF UNICODE}'DirectDrawEnumerateExW'{$ELSE}'DirectDrawEnumerateExA'{$ENDIF};
  893. {$EXTERNALSYM DirectDrawEnumerateEx}
  894. function DirectDrawCreate(lpGUID: PGUID; out lplpDD: IDirectDraw;
  895.     pUnkOuter: IUnknown): HResult; stdcall; external DirectDrawDll;
  896. {$EXTERNALSYM DirectDrawCreate}
  897. function DirectDrawCreateEx(lpGUID: PGUID; out lplpDD: IDirectDraw7;
  898.     const iid: TGUID; pUnkOuter: IUnknown): HResult; stdcall; external DirectDrawDll;
  899. {$EXTERNALSYM DirectDrawCreateEx}
  900. function DirectDrawCreateClipper(dwFlags: DWORD; out lplpDDClipper: IDirectDrawClipper;
  901.     pUnkOuter: IUnknown): HResult; stdcall; external DirectDrawDll;
  902. {$EXTERNALSYM DirectDrawCreateClipper}
  903. {$ENDIF}
  904. const
  905. (*
  906.  * Flags for DirectDrawEnumerateEx
  907.  * DirectDrawEnumerateEx supercedes DirectDrawEnumerate. You must use GetProcAddress to
  908.  * obtain a function pointer (of type LPDIRECTDRAWENUMERATEEX) to DirectDrawEnumerateEx.
  909.  * By default, only the primary display device is enumerated.
  910.  * DirectDrawEnumerate is equivalent to DirectDrawEnumerate(,,DDENUM_NONDISPLAYDEVICES)
  911.  *)
  912. (*
  913.  * This flag causes enumeration of any GDI display devices which are part of
  914.  * the Windows Desktop
  915.  *)
  916.   DDENUM_ATTACHEDSECONDARYDEVICES     = $00000001;
  917.   {$EXTERNALSYM DDENUM_ATTACHEDSECONDARYDEVICES}
  918. (*
  919.  * This flag causes enumeration of any GDI display devices which are not
  920.  * part of the Windows Desktop
  921.  *)
  922.   DDENUM_DETACHEDSECONDARYDEVICES     = $00000002;
  923.   {$EXTERNALSYM DDENUM_DETACHEDSECONDARYDEVICES}
  924. (*
  925.  * This flag causes enumeration of non-display devices
  926.  *)
  927.   DDENUM_NONDISPLAYDEVICES            = $00000004;
  928.   {$EXTERNALSYM DDENUM_NONDISPLAYDEVICES}
  929.   REGSTR_KEY_DDHW_DESCRIPTION = 'Description';
  930.   {$EXTERNALSYM REGSTR_KEY_DDHW_DESCRIPTION}
  931.   REGSTR_KEY_DDHW_DRIVERNAME  = 'DriverName';
  932.   {$EXTERNALSYM REGSTR_KEY_DDHW_DRIVERNAME}
  933.   REGSTR_PATH_DDHW            = 'HardwareDirectDrawDrivers';
  934.   {$EXTERNALSYM REGSTR_PATH_DDHW}
  935.   DDCREATE_HARDWAREONLY       = $00000001;
  936.   {$EXTERNALSYM DDCREATE_HARDWAREONLY}
  937.   DDCREATE_EMULATIONONLY      = $00000002;
  938.   {$EXTERNALSYM DDCREATE_EMULATIONONLY}
  939. (*
  940.  * Flags for the IDirectDraw4::GetDeviceIdentifier method
  941.  *)
  942. (*
  943.  * This flag causes GetDeviceIdentifier to return information about the host (typically 2D) adapter in a system equipped
  944.  * with a stacked secondary 3D adapter. Such an adapter appears to the application as if it were part of the
  945.  * host adapter, but is typically physcially located on a separate card. The stacked secondary's information is
  946.  * returned when GetDeviceIdentifier's dwFlags field is zero, since this most accurately reflects the qualities
  947.  * of the DirectDraw object involved.
  948.  *)
  949.   DDGDI_GETHOSTIDENTIFIER         = $00000001;
  950.   {$EXTERNALSYM DDGDI_GETHOSTIDENTIFIER}
  951. (*
  952.  * Macros for interpretting DDEVICEIDENTIFIER2.dwWHQLLevel
  953.  *)
  954. function GET_WHQL_YEAR(dwWHQLLevel: DWORD): DWORD;
  955. {$EXTERNALSYM GET_WHQL_YEAR}
  956. function GET_WHQL_MONTH(dwWHQLLevel: DWORD): DWORD;
  957. {$EXTERNALSYM GET_WHQL_MONTH}
  958. function GET_WHQL_DAY(dwWHQLLevel: DWORD): DWORD;
  959. {$EXTERNALSYM GET_WHQL_DAY}
  960. (*==========================================================================;
  961.  *
  962.  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
  963.  *
  964.  *  File: dvp.h
  965.  *  Content: DirectDrawVideoPort include file
  966.  *
  967.  ***************************************************************************)
  968. const
  969. (*
  970.  * GUIDS used by DirectDrawVideoPort objects
  971.  *)
  972. (*
  973.   IID_IDDVideoPortContainer,
  974.   IID_IDirectDrawVideoPort,
  975.   IID_IDirectDrawVideoPortNotify
  976.     - are defined later in Delphi header
  977. *)
  978.   DDVPTYPE_E_HREFH_VREFH: TGUID = (D1:$54F39980;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
  979.   {$EXTERNALSYM DDVPTYPE_E_HREFH_VREFH}
  980.   DDVPTYPE_E_HREFH_VREFL: TGUID = (D1:$92783220;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
  981.   {$EXTERNALSYM DDVPTYPE_E_HREFH_VREFL}
  982.   DDVPTYPE_E_HREFL_VREFH: TGUID = (D1:$A07A02E0;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
  983.   {$EXTERNALSYM DDVPTYPE_E_HREFL_VREFH}
  984.   DDVPTYPE_E_HREFL_VREFL: TGUID = (D1:$E09C77E0;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
  985.   {$EXTERNALSYM DDVPTYPE_E_HREFL_VREFL}
  986.   DDVPTYPE_CCIR656:       TGUID = (D1:$FCA326A0;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
  987.   {$EXTERNALSYM DDVPTYPE_CCIR656}
  988.   DDVPTYPE_BROOKTREE:     TGUID = (D1:$1352A560;D2:$DA61;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
  989.   {$EXTERNALSYM DDVPTYPE_BROOKTREE}
  990.   DDVPTYPE_PHILIPS:       TGUID = (D1:$332CF160;D2:$DA61;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
  991.   {$EXTERNALSYM DDVPTYPE_PHILIPS}
  992. (*
  993.  * These definitions are required to allow polymorphic structure members (i.e. those
  994.  * that are referred to both as DWORDs and as pointers) to resolve into a type
  995.  * of correct size to hold the largest of those two types (i.e. pointer) on 64 bit
  996.  * systems. For 32 bit environments, ULONG_PTR resolves to a DWORD.
  997.  *)
  998. type
  999.   ULONG_PTR = DWORD;
  1000.   {$EXTERNALSYM ULONG_PTR}
  1001. (*============================================================================
  1002.  *
  1003.  * DirectDraw Structures
  1004.  *
  1005.  * Various structures used to invoke DirectDraw.
  1006.  *
  1007.  *==========================================================================*)
  1008. type
  1009. (*
  1010.  * DDVIDEOPORTCONNECT
  1011.  *)
  1012.   PDDVideoPortConnect = ^TDDVideoPortConnect;
  1013.   _DDVIDEOPORTCONNECT = packed record
  1014.     dwSize: DWORD;              // size of the TDDVideoPortConnect structure
  1015.     dwPortWidth: DWORD;         // Width of the video port
  1016.     guidTypeID: TGUID;          // Description of video port connection
  1017.     dwFlags: DWORD;             // Connection flags
  1018.     dwReserved1: ULONG_PTR;     // Reserved, set to zero.
  1019.   end;
  1020.   {$EXTERNALSYM _DDVIDEOPORTCONNECT}
  1021.   DDVIDEOPORTCONNECT = _DDVIDEOPORTCONNECT;
  1022.   {$EXTERNALSYM DDVIDEOPORTCONNECT}
  1023.   TDDVideoPortConnect = _DDVIDEOPORTCONNECT;
  1024. (*
  1025.  * DDVIDEOPORTCAPS
  1026.  *)
  1027.   PDDVideoPortCaps = ^TDDVideoPortCaps;
  1028.   _DDVIDEOPORTCAPS = packed record
  1029.     dwSize: DWORD;                          // size of the TDDVideoPortCaps structure
  1030.     dwFlags: DWORD;                         // indicates which fields contain data
  1031.     dwMaxWidth: DWORD;                      // max width of the video port field
  1032.     dwMaxVBIWidth: DWORD;                   // max width of the VBI data
  1033.     dwMaxHeight: DWORD;                     // max height of the video port field
  1034.     dwVideoPortID: DWORD;                   // Video port ID (0 - (dwMaxVideoPorts -1))
  1035.     dwCaps: DWORD;                          // Video port capabilities
  1036.     dwFX: DWORD;                            // More video port capabilities
  1037.     dwNumAutoFlipSurfaces: DWORD;           // Number of autoflippable surfaces
  1038.     dwAlignVideoPortBoundary: DWORD;        // Byte restriction of placement within the surface
  1039.     dwAlignVideoPortPrescaleWidth: DWORD;   // Byte restriction of width after prescaling
  1040.     dwAlignVideoPortCropBoundary: DWORD;    // Byte restriction of left cropping
  1041.     dwAlignVideoPortCropWidth: DWORD;       // Byte restriction of cropping width
  1042.     dwPreshrinkXStep: DWORD;                // Width can be shrunk in steps of 1/x
  1043.     dwPreshrinkYStep: DWORD;                // Height can be shrunk in steps of 1/x
  1044.     dwNumVBIAutoFlipSurfaces: DWORD;        // Number of VBI autoflippable surfaces allowed
  1045.     dwNumPreferredAutoflip: DWORD;          // Optimal number of autoflippable surfaces for hardware
  1046.     wNumFilterTapsX: Word;                  // Number of taps the prescaler uses in the X direction (0 - no prescale, 1 - replication, etc.)
  1047.     wNumFilterTapsY: Word;                  // Number of taps the prescaler uses in the Y direction (0 - no prescale, 1 - replication, etc.)
  1048.   end;
  1049.   {$EXTERNALSYM _DDVIDEOPORTCAPS}
  1050.   DDVIDEOPORTCAPS = _DDVIDEOPORTCAPS;
  1051.   {$EXTERNALSYM DDVIDEOPORTCAPS}
  1052.   TDDVideoPortCaps = _DDVIDEOPORTCAPS;
  1053. const
  1054. (*
  1055.  * The dwMaxWidth and dwMaxVBIWidth members are valid
  1056.  *)
  1057.   DDVPD_WIDTH = $00000001;
  1058.   {$EXTERNALSYM DDVPD_WIDTH}
  1059. (*
  1060.  * The dwMaxHeight member is valid
  1061.  *)
  1062.   DDVPD_HEIGHT = $00000002;
  1063.   {$EXTERNALSYM DDVPD_HEIGHT}
  1064. (*
  1065.  * The dwVideoPortID member is valid
  1066.  *)
  1067.   DDVPD_ID = $00000004;
  1068.   {$EXTERNALSYM DDVPD_ID}
  1069. (*
  1070.  * The dwCaps member is valid
  1071.  *)
  1072.   DDVPD_CAPS = $00000008;
  1073.   {$EXTERNALSYM DDVPD_CAPS}
  1074. (*
  1075.  * The dwFX member is valid
  1076.  *)
  1077.   DDVPD_FX = $00000010;
  1078.   {$EXTERNALSYM DDVPD_FX}
  1079. (*
  1080.  * The dwNumAutoFlipSurfaces member is valid
  1081.  *)
  1082.   DDVPD_AUTOFLIP = $00000020;
  1083.   {$EXTERNALSYM DDVPD_AUTOFLIP}
  1084. (*
  1085.  * All of the alignment members are valid
  1086.  *)
  1087.   DDVPD_ALIGN = $00000040;
  1088.   {$EXTERNALSYM DDVPD_ALIGN}
  1089. (*
  1090.  * The dwNumPreferredAutoflip member is valid
  1091.  *)
  1092.   DDVPD_PREFERREDAUTOFLIP = $00000080;
  1093.   {$EXTERNALSYM DDVPD_PREFERREDAUTOFLIP}
  1094. (*
  1095.  * The wNumFilterTapsX and wNumFilterTapsY fields are valid
  1096.  *)
  1097.   DDVPD_FILTERQUALITY     = $00000100;
  1098.   {$EXTERNALSYM DDVPD_FILTERQUALITY}
  1099. type
  1100. (*
  1101.  * DDVIDEOPORTDESC
  1102.  *)
  1103.   PDDVideoPortDesc = ^TDDVideoPortDesc;
  1104.   _DDVIDEOPORTDESC = packed record
  1105.     dwSize: DWORD;                       // size of the TDDVideoPortDesc structure
  1106.     dwFieldWidth: DWORD;                 // width of the video port field
  1107.     dwVBIWidth: DWORD;                   // width of the VBI data
  1108.     dwFieldHeight: DWORD;                // height of the video port field
  1109.     dwMicrosecondsPerField: DWORD;       // Microseconds per video field
  1110.     dwMaxPixelsPerSecond: DWORD;         // Maximum pixel rate per second
  1111.     dwVideoPortID: DWORD;                // Video port ID (0 - (dwMaxVideoPorts -1))
  1112.     dwReserved1: DWORD;                  // Reserved for future use - set to zero (struct padding)
  1113.     VideoPortType: TDDVideoPortConnect;  // Description of video port connection
  1114.     dwReserved2: DWORD;                  // Reserved for future use - set to zero
  1115.     dwReserved3: DWORD;                  // Reserved for future use - set to zero
  1116.   end;
  1117.   {$EXTERNALSYM _DDVIDEOPORTDESC}
  1118.   DDVIDEOPORTDESC = _DDVIDEOPORTDESC;
  1119.   {$EXTERNALSYM DDVIDEOPORTDESC}
  1120.   TDDVideoPortDesc = _DDVIDEOPORTDESC;
  1121. (*
  1122.  * DDVIDEOPORTINFO
  1123.  *)
  1124.   PDDVideoPortInfo = ^TDDVideoPortInfo;
  1125.   _DDVIDEOPORTINFO = packed record
  1126.     dwSize: DWORD;                            // Size of the structure
  1127.     dwOriginX: DWORD;                         // Placement of the video data within the surface.
  1128.     dwOriginY: DWORD;                         // Placement of the video data within the surface.
  1129.     dwVPFlags: DWORD;                         // Video port options
  1130.     rCrop: TRect;                             // Cropping rectangle (optional).
  1131.     dwPrescaleWidth: DWORD;                   // Determines pre-scaling/zooming in the X direction (optional).
  1132.     dwPrescaleHeight: DWORD;                  // Determines pre-scaling/zooming in the Y direction (optional).
  1133.     lpddpfInputFormat: PDDPixelFormat;        // Video format written to the video port
  1134.     lpddpfVBIInputFormat: PDDPixelFormat;     // Input format of the VBI data
  1135.     lpddpfVBIOutputFormat: PDDPixelFormat;    // Output format of the data
  1136.     dwVBIHeight: DWORD;                       // Specifies the number of lines of data within the vertical blanking interval.
  1137.     dwReserved1: DWORD;                       // Reserved for future use - set to zero
  1138.     dwReserved2: DWORD;                       // Reserved for future use - set to zero
  1139.   end;
  1140.   {$EXTERNALSYM _DDVIDEOPORTINFO}
  1141.   DDVIDEOPORTINFO = _DDVIDEOPORTINFO;
  1142.   {$EXTERNALSYM DDVIDEOPORTINFO}
  1143.   TDDVideoPortInfo = _DDVIDEOPORTINFO;
  1144. (*
  1145.  * DDVIDEOPORTBANDWIDTH
  1146.  *)
  1147.   PDDVideoPortBandWidth = ^TDDVideoPortBandWidth;
  1148.   _DDVIDEOPORTBANDWIDTH = packed record
  1149.     dwSize: DWORD;                 // Size of the structure
  1150.     dwCaps: DWORD;
  1151.     dwOverlay: DWORD;              // Zoom factor at which overlay is supported
  1152.     dwColorkey: DWORD;             // Zoom factor at which overlay w/ colorkey is supported
  1153.     dwYInterpolate: DWORD;         // Zoom factor at which overlay w/ Y interpolation is supported
  1154.     dwYInterpAndColorkey: DWORD;   // Zoom factor at which ovelray w/ Y interpolation and colorkeying is supported
  1155.     dwReserved1: DWORD;            // Reserved for future use - set to zero
  1156.     dwReserved2: DWORD;            // Reserved for future use - set to zero
  1157.   end;
  1158.   {$EXTERNALSYM _DDVIDEOPORTBANDWIDTH}
  1159.   DDVIDEOPORTBANDWIDTH = _DDVIDEOPORTBANDWIDTH;
  1160.   {$EXTERNALSYM DDVIDEOPORTBANDWIDTH}
  1161.   TDDVideoPortBandWidth = _DDVIDEOPORTBANDWIDTH;
  1162. (*
  1163.  * DDVIDEOPORTSTATUS
  1164.  *)
  1165.   PDDVideoPortStatus = ^TDDVideoPortStatus;
  1166.   _DDVIDEOPORTSTATUS = record
  1167.     dwSize: DWORD;                       // Size of the structure
  1168.     bInUse: BOOL;                        // TRUE if video port is currently being used
  1169.     dwFlags: DWORD;                      // Currently not used
  1170.     dwReserved1: DWORD;                  // Reserved for future use
  1171.     VideoPortType: TDDVideoPortConnect;  // Information about the connection
  1172.     dwReserved2: DWORD;                  // Reserved for future use
  1173.     dwReserved3: DWORD;                  // Reserved for future use
  1174.   end;
  1175.   {$EXTERNALSYM _DDVIDEOPORTSTATUS}
  1176.   DDVIDEOPORTSTATUS = _DDVIDEOPORTSTATUS;
  1177.   {$EXTERNALSYM DDVIDEOPORTSTATUS}
  1178.   TDDVideoPortStatus = _DDVIDEOPORTSTATUS;
  1179. (*
  1180.  * DDVIDEOPORTNOTIFY
  1181.  *)
  1182.   PDDVideoPortNotify = ^TDDVideoPortNotify;
  1183.   _DDVIDEOPORTNOTIFY = packed record
  1184.     ApproximateTimeStamp: Int64;        // Timestamp in the event notification
  1185.     lField: Longint;                    // 0 if even, 1 if odd, -1 if unknown
  1186.     dwSurfaceIndex: Longword;           // Index in the surface chain of the surface that received the sample
  1187.     lDone: Longint;                     // Call InterlockedIncrement on this when done with sample
  1188.   end;
  1189.   {$EXTERNALSYM _DDVIDEOPORTNOTIFY}
  1190.   DDVIDEOPORTNOTIFY = _DDVIDEOPORTNOTIFY;
  1191.   {$EXTERNALSYM DDVIDEOPORTNOTIFY}
  1192.   TDDVideoPortNotify = _DDVIDEOPORTNOTIFY;
  1193. (*============================================================================
  1194.  *
  1195.  * Video Port Flags
  1196.  *
  1197.  * All flags are bit flags.
  1198.  *
  1199.  *==========================================================================*)
  1200. const
  1201. (****************************************************************************
  1202.  *
  1203.  * VIDEOPORT DDVIDEOPORTCONNECT / TDDVideoPortConnect FLAGS
  1204.  *
  1205.  ****************************************************************************)
  1206. (*
  1207.  * When this is set by the driver and passed to the client, this
  1208.  * indicates that the video port is capable of double clocking the data.
  1209.  * When this is set by the client, this indicates that the video port
  1210.  * should enable double clocking.  This flag is only valid with external
  1211.  * syncs.
  1212.  *)
  1213.   DDVPCONNECT_DOUBLECLOCK = $00000001;
  1214.   {$EXTERNALSYM DDVPCONNECT_DOUBLECLOCK}
  1215. (*
  1216.  * When this is set by the driver and passed to the client, this
  1217.  * indicates that the video port is capable of using an external VACT
  1218.  * signal. When this is set by the client, this indicates that the
  1219.  * video port should use the external VACT signal.
  1220.  *)
  1221.   DDVPCONNECT_VACT = $00000002;
  1222.   {$EXTERNALSYM DDVPCONNECT_VACT}
  1223. (*
  1224.  * When this is set by the driver and passed to the client, this
  1225.  * indicates that the video port is capable of treating even fields
  1226.  * like odd fields and visa versa.  When this is set by the client,
  1227.  * this indicates that the video port should treat even fields like odd
  1228.  * fields.
  1229.  *)
  1230.   DDVPCONNECT_INVERTPOLARITY = $00000004;
  1231.   {$EXTERNALSYM DDVPCONNECT_INVERTPOLARITY}
  1232. (*
  1233.  * Indicates that any data written to the video port during the VREF
  1234.  * period will not be written into the frame buffer. This flag is read only.
  1235.  *)
  1236.   DDVPCONNECT_DISCARDSVREFDATA = $00000008;
  1237.   {$EXTERNALSYM DDVPCONNECT_DISCARDSVREFDATA}
  1238. (*
  1239.  * When this is set be the driver and passed to the client, this
  1240.  * indicates that the device will write half lines into the frame buffer
  1241.  * if half lines are provided by the decoder.  If this is set by the client,
  1242.  * this indicates that the decoder will be supplying half lines.
  1243.  *)
  1244.   DDVPCONNECT_HALFLINE = $00000010;
  1245.   {$EXTERNALSYM DDVPCONNECT_HALFLINE}
  1246. (*
  1247.  * Indicates that the signal is interlaced. This flag is only
  1248.  * set by the client.
  1249.  *)
  1250.   DDVPCONNECT_INTERLACED = $00000020;
  1251.   {$EXTERNALSYM DDVPCONNECT_INTERLACED}
  1252. (*
  1253.  * Indicates that video port is shareable and that this video port
  1254.  * will use the even fields.  This flag is only set by the client.
  1255.  *)
  1256.   DDVPCONNECT_SHAREEVEN = $00000040;
  1257.   {$EXTERNALSYM DDVPCONNECT_SHAREEVEN}
  1258. (*
  1259.  * Indicates that video port is shareable and that this video port
  1260.  * will use the odd fields.  This flag is only set by the client.
  1261.  *)
  1262.   DDVPCONNECT_SHAREODD = $00000080;
  1263.   {$EXTERNALSYM DDVPCONNECT_SHAREODD}
  1264. (****************************************************************************
  1265.  *
  1266.  * VIDEOPORT DDVIDEOPORTDESC / TDDVideoPortDesc CAPS
  1267.  *
  1268.  ****************************************************************************)
  1269. (*
  1270.  * Flip can be performed automatically to avoid tearing.
  1271.  *)
  1272.   DDVPCAPS_AUTOFLIP = $00000001;
  1273.   {$EXTERNALSYM DDVPCAPS_AUTOFLIP}
  1274. (*
  1275.  * Supports interlaced video
  1276.  *)
  1277.   DDVPCAPS_INTERLACED = $00000002;
  1278.   {$EXTERNALSYM DDVPCAPS_INTERLACED}
  1279. (*
  1280.  * Supports non-interlaced video
  1281.  *)
  1282.   DDVPCAPS_NONINTERLACED = $00000004;
  1283.   {$EXTERNALSYM DDVPCAPS_NONINTERLACED}
  1284. (*
  1285.  * Indicates that the device can return whether the current field
  1286.  * of an interlaced signal is even or odd.
  1287.  *)
  1288.   DDVPCAPS_READBACKFIELD = $00000008;
  1289.   {$EXTERNALSYM DDVPCAPS_READBACKFIELD}
  1290. (*
  1291.  * Indicates that the device can return the current line of video
  1292.  * being written into the frame buffer.
  1293.  *)
  1294.   DDVPCAPS_READBACKLINE = $00000010;
  1295.   {$EXTERNALSYM DDVPCAPS_READBACKLINE}
  1296. (*
  1297.  * Allows two gen-locked video streams to share a single video port,
  1298.  * where one stream uses the even fields and the other uses the odd
  1299.  * fields. Separate parameters (including address, scaling,
  1300.  * cropping, etc.) are maintained for both fields.)
  1301.  *)
  1302.   DDVPCAPS_SHAREABLE = $00000020;
  1303.   {$EXTERNALSYM DDVPCAPS_SHAREABLE}
  1304. (*
  1305.  * Even fields of video can be automatically discarded.
  1306.  *)
  1307.   DDVPCAPS_SKIPEVENFIELDS = $00000040;
  1308.   {$EXTERNALSYM DDVPCAPS_SKIPEVENFIELDS}
  1309. (*
  1310.  * Odd fields of video can be automatically discarded.
  1311.  *)
  1312.   DDVPCAPS_SKIPODDFIELDS = $00000080;
  1313.   {$EXTERNALSYM DDVPCAPS_SKIPODDFIELDS}
  1314. (*
  1315.  * Indicates that the device is capable of driving the graphics
  1316.  * VSYNC with the video port VSYNC.
  1317.  *)
  1318.   DDVPCAPS_SYNCMASTER = $00000100;
  1319.   {$EXTERNALSYM DDVPCAPS_SYNCMASTER}
  1320. (*
  1321.  * Indicates that data within the vertical blanking interval can
  1322.  * be written to a different surface.
  1323.  *)
  1324.   DDVPCAPS_VBISURFACE = $00000200;
  1325.   {$EXTERNALSYM DDVPCAPS_VBISURFACE}
  1326. (*
  1327.  * Indicates that the video port can perform color operations
  1328.  * on the incoming data before it is written to the frame buffer.
  1329.  *)
  1330.   DDVPCAPS_COLORCONTROL = $00000400;
  1331.   {$EXTERNALSYM DDVPCAPS_COLORCONTROL}
  1332. (*
  1333.  * Indicates that the video port can accept VBI data in a different
  1334.  * width or format than the regular video data.
  1335.  *)
  1336.   DDVPCAPS_OVERSAMPLEDVBI = $00000800;
  1337.   {$EXTERNALSYM DDVPCAPS_OVERSAMPLEDVBI}
  1338. (*
  1339.  * Indicates that the video port can write data directly to system memory
  1340.  *)
  1341.   DDVPCAPS_SYSTEMMEMORY = $00001000;
  1342.   {$EXTERNALSYM DDVPCAPS_SYSTEMMEMORY}
  1343. (*
  1344.  * Indicates that the VBI and video portions of the video stream can
  1345.  * be controlled by an independent processes.
  1346.  *)
  1347.   DDVPCAPS_VBIANDVIDEOINDEPENDENT = $00002000;
  1348.   {$EXTERNALSYM DDVPCAPS_VBIANDVIDEOINDEPENDENT}
  1349. (*
  1350.  * Indicates that the video port contains high quality hardware
  1351.  * de-interlacing hardware that should be used instead of the
  1352.  * bob/weave algorithms.
  1353.  *)
  1354.   DDVPCAPS_HARDWAREDEINTERLACE = $00004000;
  1355.   {$EXTERNALSYM DDVPCAPS_HARDWAREDEINTERLACE}
  1356. (****************************************************************************
  1357.  *
  1358.  * VIDEOPORT DDVIDEOPORTDESC / TDDVideoPortDesc FX
  1359.  *
  1360.  ****************************************************************************)
  1361. (*
  1362.  * Limited cropping is available to crop out the vertical interval data.
  1363.  *)
  1364.   DDVPFX_CROPTOPDATA = $00000001;
  1365.   {$EXTERNALSYM DDVPFX_CROPTOPDATA}
  1366. (*
  1367.  * Incoming data can be cropped in the X direction before it is written
  1368.  * to the surface.
  1369.  *)
  1370.   DDVPFX_CROPX = $00000002;
  1371.   {$EXTERNALSYM DDVPFX_CROPX}
  1372. (*
  1373.  * Incoming data can be cropped in the Y direction before it is written
  1374.  * to the surface.
  1375.  *)
  1376.   DDVPFX_CROPY = $00000004;
  1377.   {$EXTERNALSYM DDVPFX_CROPY}
  1378. (*
  1379.  * Supports interleaving interlaced fields in memory.
  1380.  *)
  1381.   DDVPFX_INTERLEAVE = $00000008;
  1382.   {$EXTERNALSYM DDVPFX_INTERLEAVE}
  1383. (*
  1384.  * Supports mirroring left to right as the video data is written
  1385.  * into the frame buffer.
  1386.  *)
  1387.   DDVPFX_MIRRORLEFTRIGHT = $00000010;
  1388.   {$EXTERNALSYM DDVPFX_MIRRORLEFTRIGHT}
  1389. (*
  1390.  * Supports mirroring top to bottom as the video data is written
  1391.  * into the frame buffer.
  1392.  *)
  1393.   DDVPFX_MIRRORUPDOWN = $00000020;
  1394.   {$EXTERNALSYM DDVPFX_MIRRORUPDOWN}
  1395. (*
  1396.  * Data can be arbitrarily shrunk in the X direction before it
  1397.  * is written to the surface.
  1398.  *)
  1399.   DDVPFX_PRESHRINKX = $00000040;
  1400.   {$EXTERNALSYM DDVPFX_PRESHRINKX}
  1401. (*
  1402.  * Data can be arbitrarily shrunk in the Y direction before it
  1403.  * is written to the surface.
  1404.  *)
  1405.   DDVPFX_PRESHRINKY = $00000080;
  1406.   {$EXTERNALSYM DDVPFX_PRESHRINKY}
  1407. (*
  1408.  * Data can be binary shrunk (1/2, 1/4, 1/8, etc.) in the X
  1409.  * direction before it is written to the surface.
  1410.  *)
  1411.   DDVPFX_PRESHRINKXB = $00000100;
  1412.   {$EXTERNALSYM DDVPFX_PRESHRINKXB}
  1413. (*
  1414.  * Data can be binary shrunk (1/2, 1/4, 1/8, etc.) in the Y
  1415.  * direction before it is written to the surface.
  1416.  *)
  1417.   DDVPFX_PRESHRINKYB = $00000200;
  1418.   {$EXTERNALSYM DDVPFX_PRESHRINKYB}
  1419. (*
  1420.  * Data can be shrunk in increments of 1/x in the X direction
  1421.  * (where X is specified in the TDDVideoPortCaps.dwPreshrinkXStep)
  1422.  * before it is written to the surface.
  1423.  *)
  1424.   DDVPFX_PRESHRINKXS = $00000400;
  1425.   {$EXTERNALSYM DDVPFX_PRESHRINKXS}
  1426. (*
  1427.  * Data can be shrunk in increments of 1/x in the Y direction
  1428.  * (where X is specified in the TDDVideoPortCaps.dwPreshrinkYStep)
  1429.  * before it is written to the surface.
  1430.  *)
  1431.   DDVPFX_PRESHRINKYS = $00000800;
  1432.   {$EXTERNALSYM DDVPFX_PRESHRINKYS}
  1433. (*
  1434.  * Data can be arbitrarily stretched in the X direction before
  1435.  * it is written to the surface.
  1436.  *)
  1437.   DDVPFX_PRESTRETCHX = $00001000;
  1438.   {$EXTERNALSYM DDVPFX_PRESTRETCHX}
  1439. (*
  1440.  * Data can be arbitrarily stretched in the Y direction before
  1441.  * it is written to the surface.
  1442.  *)
  1443.   DDVPFX_PRESTRETCHY = $00002000;
  1444.   {$EXTERNALSYM DDVPFX_PRESTRETCHY}
  1445. (*
  1446.  * Data can be integer stretched in the X direction before it is
  1447.  * written to the surface.
  1448.  *)
  1449.   DDVPFX_PRESTRETCHXN = $00004000;
  1450.   {$EXTERNALSYM DDVPFX_PRESTRETCHXN}
  1451. (*
  1452.  * Data can be integer stretched in the Y direction before it is
  1453.  * written to the surface.
  1454.  *)
  1455.   DDVPFX_PRESTRETCHYN = $00008000;
  1456.   {$EXTERNALSYM DDVPFX_PRESTRETCHYN}
  1457. (*
  1458.  * Indicates that data within the vertical blanking interval can
  1459.  * be converted independently of the remaining video data.
  1460.  *)
  1461.   DDVPFX_VBICONVERT = $00010000;
  1462.   {$EXTERNALSYM DDVPFX_VBICONVERT}
  1463. (*
  1464.  * Indicates that scaling can be disabled for data within the
  1465.  * vertical blanking interval.
  1466.  *)
  1467.   DDVPFX_VBINOSCALE = $00020000;
  1468.   {$EXTERNALSYM DDVPFX_VBINOSCALE}
  1469. (*
  1470.  * Indicates that the video data can ignore the left and right
  1471.  * cropping coordinates when cropping oversampled VBI data.
  1472.  *)
  1473.   DDVPFX_IGNOREVBIXCROP = $00040000;
  1474.   {$EXTERNALSYM DDVPFX_IGNOREVBIXCROP}
  1475. (*
  1476.  * Indicates that interleaving can be disabled for data within the
  1477.  * vertical blanking interval.
  1478.  *)
  1479.   DDVPFX_VBINOINTERLEAVE     = $00080000;
  1480.   {$EXTERNALSYM DDVPFX_VBINOINTERLEAVE}
  1481. (****************************************************************************
  1482.  *
  1483.  * VIDEOPORT DDVIDEOPORTINFO / TDDVideoPortInfo FLAGS
  1484.  *
  1485.  ****************************************************************************)
  1486. (*
  1487.  * Perform automatic flipping.   Auto-flipping is performed between
  1488.  * the overlay surface that was attached to the video port using
  1489.  * IDirectDrawVideoPort::AttachSurface and the overlay surfaces that
  1490.  * are attached to the surface via the IDirectDrawSurface::AttachSurface
  1491.  * method.  The flip order is the order in which the overlay surfaces
  1492.  * were. attached.
  1493.  *)
  1494.   DDVP_AUTOFLIP = $00000001;
  1495.   {$EXTERNALSYM DDVP_AUTOFLIP}
  1496. (*
  1497.  * Perform conversion using the ddpfOutputFormat information.
  1498.  *)
  1499.   DDVP_CONVERT = $00000002;
  1500.   {$EXTERNALSYM DDVP_CONVERT}
  1501. (*
  1502.  * Perform cropping using the specified rectangle.
  1503.  *)
  1504.   DDVP_CROP = $00000004;
  1505.   {$EXTERNALSYM DDVP_CROP}
  1506. (*
  1507.  * Indicates that interlaced fields should be interleaved in memory.
  1508.  *)
  1509.   DDVP_INTERLEAVE = $00000008;
  1510.   {$EXTERNALSYM DDVP_INTERLEAVE}
  1511. (*
  1512.  * Indicates that the data should be mirrored left to right as it's
  1513.  * written into the frame buffer.
  1514.  *)
  1515.   DDVP_MIRRORLEFTRIGHT = $00000010;
  1516.   {$EXTERNALSYM DDVP_MIRRORLEFTRIGHT}
  1517. (*
  1518.  * Indicates that the data should be mirrored top to bottom as it's
  1519.  * written into the frame buffer.
  1520.  *)
  1521.   DDVP_MIRRORUPDOWN = $00000020;
  1522.   {$EXTERNALSYM DDVP_MIRRORUPDOWN}
  1523. (*
  1524.  * Perform pre-scaling/zooming based on the pre-scale parameters.
  1525.  *)
  1526.   DDVP_PRESCALE = $00000040;
  1527.   {$EXTERNALSYM DDVP_PRESCALE}
  1528. (*
  1529.  * Ignore input of even fields.
  1530.  *)
  1531.   DDVP_SKIPEVENFIELDS = $00000080;
  1532.   {$EXTERNALSYM DDVP_SKIPEVENFIELDS}
  1533. (*
  1534.  * Ignore input of odd fields.
  1535.  *)
  1536.   DDVP_SKIPODDFIELDS = $00000100;
  1537.   {$EXTERNALSYM DDVP_SKIPODDFIELDS}
  1538. (*
  1539.  * Drive the graphics VSYNCs using the video port VYSNCs.
  1540.  *)
  1541.   DDVP_SYNCMASTER = $00000200;
  1542.   {$EXTERNALSYM DDVP_SYNCMASTER}
  1543. (*
  1544.  * The ddpfVBIOutputFormatFormat member contains data that should be used
  1545.  * to convert the data within the vertical blanking interval.
  1546.  *)
  1547.   DDVP_VBICONVERT = $00000400;
  1548.   {$EXTERNALSYM DDVP_VBICONVERT}
  1549. (*
  1550.  * Indicates that data within the vertical blanking interval
  1551.  * should not be scaled.
  1552.  *)
  1553.   DDVP_VBINOSCALE = $00000800;
  1554.   {$EXTERNALSYM DDVP_VBINOSCALE}
  1555. (*
  1556.  * Indicates that these bob/weave decisions should not be
  1557.  * overriden by other interfaces.
  1558.  *)
  1559.   DDVP_OVERRIDEBOBWEAVE = $00001000;
  1560.   {$EXTERNALSYM DDVP_OVERRIDEBOBWEAVE}
  1561. (*
  1562.  * Indicates that the video data should ignore the left and right
  1563.  * cropping coordinates when cropping the VBI data.
  1564.  *)
  1565.   DDVP_IGNOREVBIXCROP = $00002000;
  1566.   {$EXTERNALSYM DDVP_IGNOREVBIXCROP}
  1567. (*
  1568.  * Indicates that interleaving can be disabled for data within the
  1569.  * vertical blanking interval.
  1570.  *)
  1571.   DDVP_VBINOINTERLEAVE = $00004000;
  1572.   {$EXTERNALSYM DDVP_VBINOINTERLEAVE}
  1573. (*
  1574.  * Indicates that the video port should use the hardware
  1575.  * de-interlacing hardware.
  1576.  *)
  1577.   DDVP_HARDWAREDEINTERLACE = $00008000;
  1578.   {$EXTERNALSYM DDVP_HARDWAREDEINTERLACE}
  1579. (****************************************************************************
  1580.  *
  1581.  * DIRIRECTDRAWVIDEOPORT GETINPUTFORMAT/GETOUTPUTFORMAT FLAGS
  1582.  *
  1583.  ****************************************************************************)
  1584. (*
  1585.  * Return formats for the video data
  1586.  *)
  1587.   DDVPFORMAT_VIDEO = $00000001;
  1588.   {$EXTERNALSYM DDVPFORMAT_VIDEO}
  1589. (*
  1590.  * Return formats for the VBI data
  1591.  *)
  1592.   DDVPFORMAT_VBI = $00000002;
  1593.   {$EXTERNALSYM DDVPFORMAT_VBI}
  1594. (****************************************************************************
  1595.  *
  1596.  * DIRIRECTDRAWVIDEOPORT SETTARGETSURFACE FLAGS
  1597.  *
  1598.  ****************************************************************************)
  1599. (*
  1600.  * Surface should receive video data (and VBI data if a surface
  1601.  * is not explicitly attached for that purpose)
  1602.  *)
  1603.   DDVPTARGET_VIDEO = $00000001;
  1604.   {$EXTERNALSYM DDVPTARGET_VIDEO}
  1605. (*
  1606.  * Surface should receive VBI data
  1607.  *)
  1608.   DDVPTARGET_VBI = $00000002;
  1609.   {$EXTERNALSYM DDVPTARGET_VBI}
  1610. (****************************************************************************
  1611.  *
  1612.  * DIRIRECTDRAWVIDEOPORT WAITFORSYNC FLAGS
  1613.  *
  1614.  ****************************************************************************)
  1615. (*
  1616.  * Waits until the beginning of the next VSYNC
  1617.  *)
  1618.   DDVPWAIT_BEGIN = $00000001;
  1619.   {$EXTERNALSYM DDVPWAIT_BEGIN}
  1620. (*
  1621.  * Waits until the end of the next/current VSYNC
  1622.  *)
  1623.   DDVPWAIT_END = $00000002;
  1624.   {$EXTERNALSYM DDVPWAIT_END}
  1625. (*
  1626.  * Waits until the beginning of the specified line
  1627.  *)
  1628.   DDVPWAIT_LINE = $00000003;
  1629.   {$EXTERNALSYM DDVPWAIT_LINE}
  1630. (****************************************************************************
  1631.  *
  1632.  * DIRECTDRAWVIDEOPORT FLIP FLAGS
  1633.  *
  1634.  ****************************************************************************)
  1635. (*
  1636.  * Flips the normal video surface
  1637.  *)
  1638.   DDVPFLIP_VIDEO = $00000001;
  1639.   {$EXTERNALSYM DDVPFLIP_VIDEO}
  1640. (*
  1641.  * Flips the VBI surface
  1642.  *)
  1643.   DDVPFLIP_VBI = $00000002;
  1644.   {$EXTERNALSYM DDVPFLIP_VBI}
  1645. (****************************************************************************
  1646.  *
  1647.  * DIRIRECTDRAWVIDEOPORT GETVIDEOSIGNALSTATUS VALUES
  1648.  *
  1649.  ****************************************************************************)
  1650. (*
  1651.  * No video signal is present at the video port
  1652.  *)
  1653.   DDVPSQ_NOSIGNAL = $00000001;
  1654.   {$EXTERNALSYM DDVPSQ_NOSIGNAL}
  1655. (*
  1656.  * A valid video signal is present at the video port
  1657.  *)
  1658.   DDVPSQ_SIGNALOK = $00000002;
  1659.   {$EXTERNALSYM DDVPSQ_SIGNALOK}
  1660. (****************************************************************************
  1661.  *
  1662.  * VIDEOPORTBANDWIDTH Flags
  1663.  *
  1664.  ****************************************************************************)
  1665. (*
  1666.  * The specified height/width refer to the size of the video port data
  1667.  * written into memory, after prescaling has occured.
  1668.  *)
  1669.   DDVPB_VIDEOPORT = $00000001;
  1670.   {$EXTERNALSYM DDVPB_VIDEOPORT}
  1671. (*
  1672.  * The specified height/width refer to the source size of the overlay.
  1673.  *)
  1674.   DDVPB_OVERLAY = $00000002;
  1675.   {$EXTERNALSYM DDVPB_OVERLAY}
  1676. (*
  1677.  * This is a query for the device to return which caps this device requires.
  1678.  *)
  1679.   DDVPB_TYPE = $00000004;
  1680.   {$EXTERNALSYM DDVPB_TYPE}
  1681. (****************************************************************************
  1682.  *
  1683.  * VIDEOPORTBANDWIDTH Caps
  1684.  *
  1685.  ****************************************************************************)
  1686. (*
  1687.  * The bandwidth for this device is dependant on the overlay source size.
  1688.  *)
  1689.   DDVPBCAPS_SOURCE = $00000001;
  1690.   {$EXTERNALSYM DDVPBCAPS_SOURCE}
  1691. (*
  1692.  * The bandwidth for this device is dependant on the overlay destination
  1693.  * size.
  1694.  *)
  1695.   DDVPBCAPS_DESTINATION = $00000002;
  1696.   {$EXTERNALSYM DDVPBCAPS_DESTINATION}
  1697. (****************************************************************************
  1698.  *
  1699.  * DDVIDEOPORTCONTAINER CreateVideoPort flags
  1700.  *
  1701.  ****************************************************************************)
  1702. (*
  1703.  * The process only wants to control the VBI portion of the video stream.
  1704.  *)
  1705.   DDVPCREATE_VBIONLY = $00000001;
  1706.   {$EXTERNALSYM DDVPCREATE_VBIONLY}
  1707. (*
  1708.  * The process only wants to control the non-VBI (video) portion of
  1709.  * the video stream.
  1710.  *)
  1711.   DDVPCREATE_VIDEOONLY = $00000002;
  1712.   {$EXTERNALSYM DDVPCREATE_VIDEOONLY}
  1713. (****************************************************************************
  1714.  *
  1715.  * DDVIDEOPORTSTATUS flags
  1716.  *
  1717.  ****************************************************************************)
  1718. (*
  1719.  * The video port interface is only controlling the VBI portion of the
  1720.  * video stream
  1721.  *)
  1722.   DDVPSTATUS_VBIONLY = $00000001;
  1723.   {$EXTERNALSYM DDVPSTATUS_VBIONLY}
  1724. (*
  1725.  * The video port interface is only controlling the video portion of the
  1726.  * video stream
  1727.  *)
  1728.   DDVPSTATUS_VIDEOONLY = $00000002;
  1729.   {$EXTERNALSYM DDVPSTATUS_VIDEOONLY}
  1730. type
  1731. (*
  1732.  * API's
  1733.  *)
  1734.   TDDEnumVideoCallback = function (lpTDDVideoPortCaps: PDDVideoPortCaps;
  1735.       lpContext: Pointer): HResult; stdcall;
  1736.   {$EXTERNALSYM TDDEnumVideoCallback}
  1737. (*
  1738.  * INTERACES FOLLOW:
  1739.  * IDirectDrawVideoPort
  1740.  * IVideoPort
  1741.  *)
  1742.   IDirectDrawVideoPort = interface;
  1743.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawVideoPort);'}
  1744.   {$EXTERNALSYM IDirectDrawVideoPort}
  1745. (*
  1746.  * IDirectDrawVideoPortContainer
  1747.  *)
  1748.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDDVideoPortContainer);'}
  1749.   {$EXTERNALSYM IDDVideoPortContainer}
  1750.   IDDVideoPortContainer = interface(IUnknown)
  1751.     ['{6C142760-A733-11CE-A521-0020AF0BE560}']
  1752.     (*** IDDVideoPortContainer methods ***)
  1753.     function CreateVideoPort(dwFlags: DWORD; var lpTDDVideoPortDesc:
  1754.         TDDVideoPortDesc; var lplpDDVideoPort: IDirectDrawVideoPort;
  1755.         pUnkOuter: IUnknown): HResult; stdcall;
  1756.     function EnumVideoPorts(dwFlags: DWORD;
  1757.         lpTDDVideoPortCaps: PDDVideoPortCaps; lpContext: Pointer;
  1758.         lpEnumVideoCallback: TDDEnumVideoCallback): HResult; stdcall;
  1759.     function GetVideoPortConnectInfo(dwPortId: DWORD; var lpNumEntries: DWORD;
  1760.         lpConnectInfo: PDDVideoPortConnect): HResult; stdcall;
  1761.     function QueryVideoPortStatus(dwPortId: DWORD;
  1762.         var lpVPStatus: TDDVideoPortStatus): HResult; stdcall;
  1763.   end;
  1764. (*
  1765.  * IDirectDrawVideoPort
  1766.  *)
  1767.   IDirectDrawVideoPort = interface(IUnknown)
  1768.     ['{B36D93E0-2B43-11CF-A2DE-00AA00B93356}']
  1769.     (*** IDirectDrawVideoPort methods ***)
  1770.     function Flip(lpDDSurface: IDirectDrawSurface; dwFlags: DWORD): HResult; stdcall;
  1771.     function GetBandwidthInfo(var lpddpfFormat: TDDPixelFormat;
  1772.         dwWidth: DWORD; dwHeight: DWORD; dwFlags: DWORD;
  1773.         var lpBandwidth: TDDVideoPortBandWidth): HResult; stdcall;
  1774.     function GetColorControls(var lpColorControl: TDDColorControl): HResult; stdcall;
  1775.     function GetInputFormats(var lpNumFormats: DWORD; var lpFormats:
  1776.         TDDPixelFormat; dwFlags: DWORD): HResult; stdcall;
  1777.     function GetOutputFormats(var lpInputFormat: TDDPixelFormat;
  1778.         var lpNumFormats: DWORD; lpFormats: PDDPixelFormat; dwFlags: DWORD):
  1779.         HResult; stdcall;
  1780.     function GetFieldPolarity(var lpbVideoField: BOOL): HResult; stdcall;
  1781.     function GetVideoLine(var lpdwLine: DWORD): HResult; stdcall;
  1782.     function GetVideoSignalStatus(varlpdwStatus: DWORD): HResult; stdcall;
  1783.     function SetColorControls(var lpColorControl: TDDColorControl): HResult; stdcall;
  1784.     function SetTargetSurface(lpDDSurface: IDirectDrawSurface; dwFlags: DWORD):
  1785.         HResult; stdcall;
  1786.     function StartVideo(var lpVideoInfo: TDDVideoPortInfo): HResult; stdcall;
  1787.     function StopVideo: HResult; stdcall;
  1788.     function UpdateVideo(var lpVideoInfo: TDDVideoPortInfo): HResult; stdcall;
  1789.     function WaitForSync(dwFlags: DWORD; dwLine: DWORD; dwTimeout: DWORD):
  1790.         HResult; stdcall;
  1791.   end;
  1792.   IID_IDDVideoPortContainer = IDDVideoPortContainer;
  1793.   {$EXTERNALSYM IID_IDDVideoPortContainer}
  1794.   IID_IDirectDrawVideoPort = IDirectDrawVideoPort;
  1795.   {$EXTERNALSYM IID_IDirectDrawVideoPort}
  1796. (*
  1797.  * IDirectDrawVideoPort
  1798.  *)
  1799.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawVideoPortNotify);'}
  1800.   {$EXTERNALSYM IDirectDrawVideoPortNotify}
  1801.   IDirectDrawVideoPortNotify = interface(IUnknown)
  1802.     ['{6C142760-A733-11CE-A521-0020AF0BE560}']
  1803.     (*** IVideoPort methods ***)
  1804.     function AcquireNotification(hEvent: THandle; const params: TDDVideoPortNotify): HResult; stdcall;
  1805.     function ReleaseNotification(hEvent: THandle): HResult; stdcall;
  1806.   end;
  1807. var
  1808.   DDrawDLL : HMODULE = 0;
  1809. function DDErrorString(Value: HResult): String;
  1810. implementation
  1811. //#define MAKE_DDHRESULT( code )  MAKE_HRESULT( 1, _FACDD, code )
  1812. function MAKE_DDHRESULT(Code: DWORD): HResult;
  1813. begin
  1814.   Result:= MakeResult(1, _FACDD, code);
  1815. end;
  1816. //#define GET_WHQL_YEAR( dwWHQLLevel ) 
  1817. //    ( (dwWHQLLevel) / 0x10000 )
  1818. function GET_WHQL_YEAR(dwWHQLLevel: DWORD): DWORD;
  1819. begin
  1820.   Result := (dwWHQLLevel) div $10000;
  1821. end;
  1822. //#define GET_WHQL_MONTH( dwWHQLLevel ) 
  1823. //    ( ( (dwWHQLLevel) / 0x100 ) & 0x00ff )
  1824. function GET_WHQL_MONTH(dwWHQLLevel: DWORD): DWORD;
  1825. begin
  1826.   Result := ((dwWHQLLevel) div $100) and $00ff;
  1827. end;
  1828. //#define GET_WHQL_DAY( dwWHQLLevel ) 
  1829. //    ( (dwWHQLLevel) & 0xff )
  1830. function GET_WHQL_DAY(dwWHQLLevel: DWORD): DWORD;
  1831. begin
  1832.   Result := (dwWHQLLevel) and $ff;
  1833. end;
  1834. function MAKEFOURCC(ch0, ch1, ch2, ch3: Char): DWORD;
  1835. begin
  1836.   Result := DWORD(Byte(ch0) shl 0) or
  1837.             DWORD(Byte(ch1) shl 8) or
  1838.             DWORD(Byte(ch2) shl 16) or
  1839.             DWORD(Byte(ch3) shl 24);
  1840. end;
  1841. function DDErrorString(Value: HResult): String;
  1842. begin
  1843.   case Value of
  1844.     DD_OK: Result := 'The request completed successfully.';
  1845.     DDERR_ALREADYINITIALIZED: Result := 'This object is already initialized.';
  1846.     DDERR_BLTFASTCANTCLIP: Result := ' if a clipper object is attached to the source surface passed into a BltFast call.';
  1847.     DDERR_CANNOTATTACHSURFACE: Result := 'This surface can not be attached to the requested surface.';
  1848.     DDERR_CANNOTDETACHSURFACE: Result := 'This surface can not be detached from the requested surface.';
  1849.     DDERR_CANTCREATEDC: Result := 'Windows can not create any more DCs.';
  1850.     DDERR_CANTDUPLICATE: Result := 'Cannot duplicate primary & 3D surfaces, or surfaces that are implicitly created.';
  1851.     DDERR_CLIPPERISUSINGHWND: Result := 'An attempt was made to set a cliplist for a clipper object that is already monitoring an hwnd.';
  1852.     DDERR_COLORKEYNOTSET: Result := 'No src color key specified for this operation.';
  1853.     DDERR_CURRENTLYNOTAVAIL: Result := 'Support is currently not available.';
  1854.     DDERR_DIRECTDRAWALREADYCREATED: Result := 'A DirectDraw object representing this driver has already been created for this process.';
  1855.     DDERR_EXCEPTION: Result := 'An exception was encountered while performing the requested operation.';
  1856.     DDERR_EXCLUSIVEMODEALREADYSET: Result := 'An attempt was made to set the cooperative level when it was already set to exclusive.';
  1857.     DDERR_GENERIC: Result := 'Generic failure.';
  1858.     DDERR_HEIGHTALIGN: Result := 'Height of rectangle provided is not a multiple of reqd alignment.';
  1859.     DDERR_HWNDALREADYSET: Result := 'The CooperativeLevel HWND has already been set. It can not be reset while the process has surfaces or palettes created.';
  1860.     DDERR_HWNDSUBCLASSED: Result := 'HWND used by DirectDraw CooperativeLevel has been subclassed, this prevents DirectDraw from restoring state.';
  1861.     DDERR_IMPLICITLYCREATED: Result := 'This surface can not be restored because it is an implicitly created surface.';
  1862.     DDERR_INCOMPATIBLEPRIMARY: Result := 'Unable to match primary surface creation request with existing primary surface.';
  1863.     DDERR_INVALIDCAPS: Result := 'One or more of the caps bits passed to the callback are incorrect.';
  1864.     DDERR_INVALIDCLIPLIST: Result := 'DirectDraw does not support the provided cliplist.';
  1865.     DDERR_INVALIDDIRECTDRAWGUID: Result := 'The GUID passed to DirectDrawCreate is not a valid DirectDraw driver identifier.';
  1866.     DDERR_INVALIDMODE: Result := 'DirectDraw does not support the requested mode.';
  1867.     DDERR_INVALIDOBJECT: Result := 'DirectDraw received a pointer that was an invalid DIRECTDRAW object.';
  1868.     DDERR_INVALIDPARAMS: Result := 'One or more of the parameters passed to the function are incorrect.';
  1869.     DDERR_INVALIDPIXELFORMAT: Result := 'The pixel format was invalid as specified.';
  1870.     DDERR_INVALIDPOSITION: Result := 'Returned when the position of the overlay on the destination is no longer legal for that destination.';
  1871.     DDERR_INVALIDRECT: Result := 'Rectangle provided was invalid.';
  1872.     DDERR_LOCKEDSURFACES: Result := 'Operation could not be carried out because one or more surfaces are locked.';
  1873.     DDERR_NO3D: Result := 'There is no 3D present.';
  1874.     DDERR_NOALPHAHW: Result := 'Operation could not be carried out because there is no alpha accleration hardware present or available.';
  1875.     DDERR_NOBLTHW: Result := 'No blitter hardware present.';
  1876.     DDERR_NOCLIPLIST: Result := 'No cliplist available.';
  1877.     DDERR_NOCLIPPERATTACHED: Result := 'No clipper object attached to surface object.';
  1878.     DDERR_NOCOLORCONVHW: Result := 'Operation could not be carried out because there is no color conversion hardware present or available.';
  1879.     DDERR_NOCOLORKEY: Result := 'Surface does not currently have a color key';
  1880.     DDERR_NOCOLORKEYHW: Result := 'Operation could not be carried out because there is no hardware support of the destination color key.';
  1881.     DDERR_NOCOOPERATIVELEVELSET: Result := 'Create function called without DirectDraw object method SetCooperativeLevel being called.';
  1882.     DDERR_NODC: Result := 'No DC was ever created for this surface.';
  1883.     DDERR_NODDROPSHW: Result := 'No DirectDraw ROP hardware.';
  1884.     DDERR_NODIRECTDRAWHW: Result := 'A hardware-only DirectDraw object creation was attempted but the driver did not support any hardware.';
  1885.     DDERR_NOEMULATION: Result := 'Software emulation not available.';
  1886.     DDERR_NOEXCLUSIVEMODE: Result := 'Operation requires the application to have exclusive mode but the application does not have exclusive mode.';
  1887.     DDERR_NOFLIPHW: Result := 'Flipping visible surfaces is not supported.';
  1888.     DDERR_NOGDI: Result := 'There is no GDI present.';
  1889.     DDERR_NOHWND: Result := 'Clipper notification requires an HWND or no HWND has previously been set as the CooperativeLevel HWND.';
  1890.     DDERR_NOMIRRORHW: Result := 'Operation could not be carried out because there is no hardware present or available.';
  1891.     DDERR_NOOVERLAYDEST: Result := 'Returned when GetOverlayPosition is called on an overlay that UpdateOverlay has never been called on to establish a destination.';
  1892.     DDERR_NOOVERLAYHW: Result := 'Operation could not be carried out because there is no overlay hardware present or available.';
  1893.     DDERR_NOPALETTEATTACHED: Result := 'No palette object attached to this surface.';
  1894.     DDERR_NOPALETTEHW: Result := 'No hardware support for 16 or 256 color palettes.';
  1895.     DDERR_NORASTEROPHW: Result := 'Operation could not be carried out because there is no appropriate raster op hardware present or available.';
  1896.     DDERR_NOROTATIONHW: Result := 'Operation could not be carried out because there is no rotation hardware present or available.';
  1897.     DDERR_NOSTRETCHHW: Result := 'Operation could not be carried out because there is no hardware support for stretching.';
  1898.     DDERR_NOT4BITCOLOR: Result := 'DirectDrawSurface is not in 4 bit color palette and the requested operation requires 4 bit color palette.';
  1899.     DDERR_NOT4BITCOLORINDEX: Result := 'DirectDrawSurface is not in 4 bit color index palette and the requested operation requires 4 bit color index palette.';
  1900.     DDERR_NOT8BITCOLOR: Result := 'DirectDrawSurface is not in 8 bit color mode and the requested operation requires 8 bit color.';
  1901.     DDERR_NOTAOVERLAYSURFACE: Result := 'Returned when an overlay member is called for a non-overlay surface.';
  1902.     DDERR_NOTEXTUREHW: Result := 'Operation could not be carried out because there is no texture mapping hardware present or available.';
  1903.     DDERR_NOTFLIPPABLE: Result := 'An attempt has been made to flip a surface that is not flippable.';
  1904.     DDERR_NOTFOUND: Result := 'Requested item was not found.';
  1905.     DDERR_NOTLOCKED: Result := 'Surface was not locked.  An attempt to unlock a surface that was not locked at all, or by this process, has been attempted.';
  1906.     DDERR_NOTPALETTIZED: Result := 'The surface being used is not a palette-based surface.';
  1907.     DDERR_NOVSYNCHW: Result := 'Operation could not be carried out because there is no hardware support for vertical blank synchronized operations.';
  1908.     DDERR_NOZBUFFERHW: Result := 'Operation could not be carried out because there is no hardware support for zbuffer blitting.';
  1909.     DDERR_NOZOVERLAYHW: Result := 'Overlay surfaces could not be z layered based on their BltOrder because the hardware does not support z layering of overlays.';
  1910.     DDERR_OUTOFCAPS: Result := 'The hardware needed for the requested operation has already been allocated.';
  1911.     DDERR_OUTOFMEMORY: Result := 'DirectDraw does not have enough memory to perform the operation.';
  1912.     DDERR_OUTOFVIDEOMEMORY: Result := 'DirectDraw does not have enough memory to perform the operation.';
  1913.     DDERR_OVERLAYCANTCLIP: Result := 'The hardware does not support clipped overlays.';
  1914.     DDERR_OVERLAYCOLORKEYONLYONEACTIVE: Result := 'Can only have ony color key active at one time for overlays.';
  1915.     DDERR_OVERLAYNOTVISIBLE: Result := 'Returned when GetOverlayPosition is called on a hidden overlay.';
  1916.     DDERR_PALETTEBUSY: Result := 'Access to this palette is being refused because the palette is already locked by another thread.';
  1917.     DDERR_PRIMARYSURFACEALREADYEXISTS: Result := 'This process already has created a primary surface.';
  1918.     DDERR_REGIONTOOSMALL: Result := 'Region passed to Clipper::GetClipList is too small.';
  1919.     DDERR_SURFACEALREADYATTACHED: Result := 'This surface is already attached to the surface it is being attached to.';
  1920.     DDERR_SURFACEALREADYDEPENDENT: Result := 'This surface is already a dependency of the surface it is being made a dependency of.';
  1921.     DDERR_SURFACEBUSY: Result := 'Access to this surface is being refused because the surface is already locked by another thread.';
  1922.     DDERR_SURFACEISOBSCURED: Result := 'Access to surface refused because the surface is obscured.';
  1923.     DDERR_SURFACELOST: Result := 'Access to this surface is being refused because the surface memory is gone. The DirectDrawSurface object representing this surface should have Restore called on it.';
  1924.     DDERR_SURFACENOTATTACHED: Result := 'The requested surface is not attached.';
  1925.     DDERR_TOOBIGHEIGHT: Result := 'Height requested by DirectDraw is too large.';
  1926.     DDERR_TOOBIGSIZE: Result := 'Size requested by DirectDraw is too large, but the individual height and width are OK.';
  1927.     DDERR_TOOBIGWIDTH: Result := 'Width requested by DirectDraw is too large.';
  1928.     DDERR_UNSUPPORTED: Result := 'Action not supported.';
  1929.     DDERR_UNSUPPORTEDFORMAT: Result := 'FOURCC format requested is unsupported by DirectDraw.';
  1930.     DDERR_UNSUPPORTEDMASK: Result := 'Bitmask in the pixel format requested is unsupported by DirectDraw.';
  1931.     DDERR_VERTICALBLANKINPROGRESS: Result := 'Vertical blank is in progress.';
  1932.     DDERR_WASSTILLDRAWING: Result := 'Informs DirectDraw that the previous Blt which is transfering information to or from this Surface is incomplete.';
  1933.     DDERR_WRONGMODE: Result := 'This surface can not be restored because it was created in a different mode.';
  1934.     DDERR_XALIGN: Result := 'Rectangle provided was not horizontally aligned on required boundary.';
  1935.     // new:
  1936.     DDERR_OVERLAPPINGRECTS: Result := 'Operation could not be carried out because the source and destination rectangles are on the same surface and overlap each other.';
  1937.     DDERR_INVALIDSTREAM: Result := 'The specified stream contains invalid data';
  1938.     DDERR_UNSUPPORTEDMODE: Result := 'The display is currently in an unsupported mode';
  1939.     DDERR_NOMIPMAPHW: Result := 'Operation could not be carried out because there is no mip-map texture mapping hardware present or available.';
  1940.     DDERR_INVALIDSURFACETYPE: Result := 'The requested action could not be performed because the surface was of the wrong type.';
  1941.     DDERR_NOOPTIMIZEHW: Result := 'Device does not support optimized surfaces, therefore no video memory optimized surfaces';
  1942.     DDERR_NOTLOADED: Result := 'Surface is an optimized surface, but has not yet been allocated any memory';
  1943.     DDERR_NOFOCUSWINDOW: Result := 'Attempt was made to create or set a device window without first setting the focus window';
  1944.     DDERR_DCALREADYCREATED: Result := 'A DC has already been returned for this surface. Only one DC can be retrieved per surface.';
  1945.     DDERR_NONONLOCALVIDMEM: Result := 'An attempt was made to allocate non-local video memory from a device that does not support non-local video memory.';
  1946.     DDERR_CANTPAGELOCK: Result := 'The attempt to page lock a surface failed.';
  1947.     DDERR_CANTPAGEUNLOCK: Result := 'The attempt to page unlock a surface failed.';
  1948.     DDERR_NOTPAGELOCKED: Result := 'An attempt was made to page unlock a surface with no outstanding page locks.';
  1949.     DDERR_MOREDATA: Result := 'There is more data available than the specified buffer size could hold';
  1950.     DDERR_EXPIRED: Result := 'The data has expired and is therefore no longer valid.';
  1951.     DDERR_VIDEONOTACTIVE: Result := 'The video port is not active';
  1952.     DDERR_DEVICEDOESNTOWNSURFACE: Result := 'Surfaces created by one direct draw device cannot be used directly by another direct draw device.';
  1953.     DDERR_NOTINITIALIZED: Result := 'An attempt was made to invoke an interface member of a DirectDraw object created by CoCreateInstance() before it was initialized.';
  1954.     else Result := 'Unrecognized Error';
  1955.   end;
  1956. end;
  1957. {$IFDEF DIRECTDRAW_DYNAMIC_LINK}
  1958. var
  1959.   DirectDrawLib: THandle = 0;
  1960. function DirectDrawLoaded: Boolean;
  1961. begin
  1962.   Result:= DirectDrawLib <> 0;
  1963. end;
  1964. function UnLoadDirectDraw: Boolean;
  1965. begin
  1966.   Result:= True;
  1967.   if DirectDrawLoaded then
  1968.   begin
  1969.     Result:= FreeLibrary(DirectDrawLib);
  1970.     DirectDrawEnumerateA := nil;
  1971.     DirectDrawEnumerateW := nil;
  1972.     DirectDrawEnumerate := nil;
  1973.     DirectDrawEnumerateExA := nil;
  1974.     DirectDrawEnumerateExW := nil;
  1975.     DirectDrawEnumerateEx := nil;
  1976.     DirectDrawCreate := nil;
  1977.     DirectDrawCreateEx := nil;
  1978.     DirectDrawCreateClipper := nil;
  1979.     {$IFDEF WINNT}
  1980.     NtDirectDrawCreate := nil;
  1981.     {$ENDIF}
  1982.     DirectDrawLib:= 0;
  1983.   end;
  1984. end;
  1985. function LoadDirectDraw: Boolean;
  1986. begin
  1987.   Result:= DirectDrawLoaded;
  1988.   if (not Result) then
  1989.   begin
  1990.     DirectDrawLib:= LoadLibrary(DirectDrawDll);
  1991.     if DirectDrawLoaded then
  1992.     begin
  1993.       DirectDrawEnumerateA := GetProcAddress(DirectDrawLib, 'DirectDrawEnumerateA');
  1994.       DirectDrawEnumerateW := GetProcAddress(DirectDrawLib, 'DirectDrawEnumerateW');
  1995.       {$IFDEF UNICODE}
  1996.       DirectDrawEnumerate := GetProcAddress(DirectDrawLib, 'DirectDrawEnumerateW');
  1997.       {$ELSE}
  1998.       DirectDrawEnumerate := GetProcAddress(DirectDrawLib, 'DirectDrawEnumerateA');
  1999.       {$ENDIF}
  2000.       DirectDrawEnumerateExA := GetProcAddress(DirectDrawLib, 'DirectDrawEnumerateExA');
  2001.       DirectDrawEnumerateExW := GetProcAddress(DirectDrawLib, 'DirectDrawEnumerateExW');
  2002.       {$IFDEF UNICODE}
  2003.       DirectDrawEnumerateEx := GetProcAddress(DirectDrawLib, 'DirectDrawEnumerateExW');
  2004.       {$ELSE}
  2005.       DirectDrawEnumerateEx := GetProcAddress(DirectDrawLib, 'DirectDrawEnumerateExA');
  2006.       {$ENDIF}
  2007.       DirectDrawCreate := GetProcAddress(DDrawDLL,'DirectDrawCreate');
  2008.       DirectDrawCreateEx := GetProcAddress(DDrawDLL,'DirectDrawCreateEx');
  2009.       DirectDrawCreateClipper := GetProcAddress(DDrawDLL,'DirectDrawCreateClipper');
  2010.       {$IFDEF WINNT}
  2011.       NtDirectDrawCreate := GetProcAddress(DDrawDLL,'NtDirectDrawCreate');
  2012.       {$ENDIF}
  2013.       Result:= Assigned(DirectDrawCreate); // At least basic procedure is found!
  2014.       if not Result then UnLoadDirectDraw;
  2015.     end;
  2016.   end;
  2017. end;
  2018. {$ELSE}
  2019. function DirectDrawLoaded: Boolean;
  2020. begin // Stub function for static linking
  2021.   Result:= True;
  2022. end;
  2023. function UnLoadDirectDraw: Boolean;
  2024. begin // Stub function for static linking
  2025.   Result:= True; // should emulate "normal" behaviour
  2026. end;
  2027. function LoadDirectDraw: Boolean;
  2028. begin // Stub function for static linking
  2029.   Result:= True;
  2030. end;
  2031. {$ENDIF}
  2032. {$IFDEF DIRECTDRAW_DYNAMIC_LINK}
  2033. initialization
  2034. {$IFNDEF DIRECTDRAW_DYNAMIC_LINK_EXPLICIT}
  2035.   LoadDirectDraw;
  2036. {$ENDIF}
  2037. finalization
  2038.   UnLoadDirectDraw;
  2039. {$ENDIF}
  2040. end.