mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 09:39:43 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			564 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			564 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{ Declarations for Windows meta files
 | 
						|
 | 
						|
  Infos taken from
 | 
						|
  - http://msdn.microsoft.com/en-us/library/cc250370.aspx
 | 
						|
  - http://wvware.sourceforge.net/caolan/ora-wmf.html
 | 
						|
  - http://www.symantec.com/avcenter/reference/inside.the.windows.meta.file.format.pdf
 | 
						|
}
 | 
						|
 | 
						|
unit fpvWMF;
 | 
						|
 | 
						|
interface
 | 
						|
 | 
						|
type
 | 
						|
  TWMFHeader = packed record
 | 
						|
    FileType: Word;        // Type of metafile (0=memory, 1=disk)
 | 
						|
    HeaderSize: Word;      // Size of header in WORDS (always 9)
 | 
						|
    Version: Word;         // Version of Microsoft Windows used
 | 
						|
    FileSize: DWord;       // Total size of the metafile in WORDs
 | 
						|
    NumOfObjects: Word;    // Number of objects in the file
 | 
						|
    MaxRecordSize: DWord;  // The size of largest record in WORDs
 | 
						|
    NumOfParams: Word;     // Not Used (always 0)
 | 
						|
  end;
 | 
						|
  PWMFHeader = ^TWMFHeader;
 | 
						|
 | 
						|
 { Placeable Metafiles (file extension .APM) were created by Aldus Corporation
 | 
						|
  as a non-standard way of specifying how a metafile is mapped and scaled on an
 | 
						|
  output device. Placeable metafiles are quite wide-spread, but not directly
 | 
						|
  supported by the Windows API.
 | 
						|
  Placeable Metafiles are limited to 64K in length.
 | 
						|
  Each placeable metafile begins with a 22-byte header followed by a standard
 | 
						|
  metafile. }
 | 
						|
  TPlaceableMetaHeader = packed record
 | 
						|
    Key: DWord;               // Magic number (always 9AC6CDD7h)
 | 
						|
    Handle: Word;             // Metafile HANDLE number (always 0)
 | 
						|
    Left: SmallInt;           // Left coordinate in metafile units
 | 
						|
    Top: SmallInt;            // Top coordinate in metafile units
 | 
						|
    Right: SmallInt;          // Right coordinate in metafile units
 | 
						|
    Bottom: SmallInt;         // Bottom coordinate in metafile units
 | 
						|
    Inch: Word;               // Number of metafile units per inch
 | 
						|
    Reserved: DWord;          // Reserved (always 0)
 | 
						|
    Checksum: Word;           // Checksum value for previous 10 WORDs
 | 
						|
  end;
 | 
						|
  PPlaceableMetaHeader = ^TPlaceableMetaHeader;
 | 
						|
 | 
						|
  TEnhancedMetaHeader = packed record      // 80 bytes
 | 
						|
    RecordType: DWord;        // Record type, must be 00000001h for EMF
 | 
						|
    RecordSize: DWord;        // Size of the record in bytes
 | 
						|
    BoundsLeft: LongInt;      // Left inclusive bounds
 | 
						|
    BoundsRight: LongInt;     // Right inclusive bounds
 | 
						|
    BoundsTop: LongInt;       // Top inclusive bounds
 | 
						|
    BoundsBottom: LongInt;    // Bottom inclusive bounds
 | 
						|
    FrameLeft: LongInt;       // Left side of inclusive picture frame
 | 
						|
    FrameRight: LongInt;      // Right side of inclusive picture frame
 | 
						|
    FrameTop: LongInt;        // Top side of inclusive picture frame
 | 
						|
    FrameBottom: LongInt;     // Bottom side of inclusive picture frame
 | 
						|
    Signature: DWord;         // Signature ID (always $464D4520)
 | 
						|
    Version: DWord;           // Version of the metafile, always $00000100
 | 
						|
    Size: DWord;              // Size of the metafile in bytes
 | 
						|
    NumOfRecords: DWord;      // Number of records in the metafile
 | 
						|
    NumOfHandles: Word;       // Number of handles in the handle table
 | 
						|
    Reserved: Word;           // Not used (always 0)
 | 
						|
    SizeOfDescrip: DWord;     // Length of description string (16-bit chars) in WORDs, incl zero
 | 
						|
    OffsOfDescrip: DWord;     // Offset of description string in metafile (from beginning)
 | 
						|
    NumPalEntries: DWord;     // Number of color palette entries
 | 
						|
    WidthDevPixels: LongInt;  // Width of display device in pixels
 | 
						|
    HeightDevPixels: LongInt; // Height of display device in pixels
 | 
						|
    WidthDevMM: LongInt;      // Width of display device in millimeters
 | 
						|
    HeightDevMM: LongInt;     // Height of display device in millimeters
 | 
						|
  end;
 | 
						|
 | 
						|
  {Clipboard metafiles are also based on the standard metafile format, but are
 | 
						|
   preceded by an additional 8- or 16-byte header that allows the position of
 | 
						|
   the metafile on the Clipboard viewer. If the Clipboard metafile was created
 | 
						|
   using a 16-bit version of Windows (Windows and Windows for Workgroups) this
 | 
						|
   header will contain 2-byte fields arranged in the following structure. If the
 | 
						|
   clipboard metafile was created under a 32-bit Windows environment (Windows NT
 | 
						|
   and Windows 95) this header will contain the same fields as the Win16 WMF
 | 
						|
   header, but the fields are 32 bytes in length. }
 | 
						|
  TWMFClipboard16MetaHeader = packed record
 | 
						|
    MappingMode: SmallInt;    // see MM_XXXX constants
 | 
						|
    Width: SmallInt;          // Width in units of MappingMode
 | 
						|
    Height: SmallInt;         // Height in units of MappingMode
 | 
						|
    Handle: Word;             // Handle to the metafile in memory
 | 
						|
  end;
 | 
						|
 | 
						|
  TWMFClipboard32MetaHeader = packed record
 | 
						|
    MappingMode: LongInt;     // see MM_XXXX constants
 | 
						|
    Width: LongInt;           // Width in units of MappingMode
 | 
						|
    Height: LongInt;          // Height in units of MappingMode
 | 
						|
    Handle: DWord;            // Handle to the metafile in memory
 | 
						|
  end;
 | 
						|
 | 
						|
  TWMFRecord = packed record
 | 
						|
    Size: DWord;              // Total size of the record in WORDs
 | 
						|
    Func: Word;               // Function number (defined in WINDOWS.H)
 | 
						|
    // Parameters[]: Word;    // Parameter values passed to function - will be read separately
 | 
						|
  end;
 | 
						|
 | 
						|
  TWMFArcRecord = packed record
 | 
						|
    YEndArc: SmallInt;        // y coordinate of end pt of radial line to arc end point
 | 
						|
    XEndArc: SmallInt;        // x coordinate of end pt of radial line to arc end point
 | 
						|
    YStartArc: SmallInt;      // y coordinate of end pt of radial line to arc start point
 | 
						|
    XStartArc: SmallInt;      // x coordinate of end pt of radial line to arc start point
 | 
						|
    Bottom: SmallInt;         // y coordinate of bottom of bounding rectangle
 | 
						|
    Right: SmallInt;          // x coordinate of right edge of bounding rectangle
 | 
						|
    Top: SmallInt;            // y coordinate of top of bounding rectangle
 | 
						|
    Left: SmallInt;           // x coordinate of left of bounding rectangle
 | 
						|
  end;
 | 
						|
  PWMFArcRecord = ^TWMFArcRecord;
 | 
						|
 | 
						|
  TWMFBrushRecord = packed record
 | 
						|
    Style: Word;
 | 
						|
    ColorRED: Byte;
 | 
						|
    ColorGREEN: Byte;
 | 
						|
    ColorBLUE: Byte;
 | 
						|
    Reserved: Byte;
 | 
						|
    // Brush hatch/pattern data of variable length follow
 | 
						|
    case integer of
 | 
						|
      0: (Hatch: Word);
 | 
						|
      // pattern not yet implemented here...
 | 
						|
  end;
 | 
						|
  PWMFBrushRecord = ^TWMFBrushRecord;
 | 
						|
 | 
						|
  TWMFColorRecord = packed record
 | 
						|
    ColorRED: Byte;
 | 
						|
    ColorGREEN: Byte;
 | 
						|
    ColorBLUE: Byte;
 | 
						|
    Reserved: Byte;
 | 
						|
  end;
 | 
						|
  PWMFColorRecord = ^TWMFColorRecord;
 | 
						|
 | 
						|
  TWMFPaletteColorRecord = packed record
 | 
						|
    Values: Byte;                    // NOTE: reverse order!
 | 
						|
    ColorBLUE: Byte;
 | 
						|
    ColorGREEN: Byte;
 | 
						|
    ColorRED: Byte;
 | 
						|
  end;
 | 
						|
  PWMFPaletteColorRecord = ^TWMFPaletteColorRecord;
 | 
						|
 | 
						|
  TWMFRectRecord = packed record
 | 
						|
    Bottom: SmallInt;
 | 
						|
    Right: SmallInt;
 | 
						|
    Top: SmallInt;
 | 
						|
    Left: SmallInt;
 | 
						|
  end;
 | 
						|
  PWMFRectRecord = ^TWMFRectRecord;
 | 
						|
 | 
						|
  TWMFExtTextRecord = packed record
 | 
						|
    Y: SmallInt;
 | 
						|
    X: SmallInt;
 | 
						|
    Len: SmallInt;
 | 
						|
    Options: Word;
 | 
						|
    // Optional bounding rect and text follow
 | 
						|
  end;
 | 
						|
  PWMFExtTextRecord = ^TWMFExtTextRecord;
 | 
						|
 | 
						|
  TWMFFontRecord = packed record
 | 
						|
    Height: SmallInt;    // signed int!
 | 
						|
    Width: SmallInt;
 | 
						|
    Escapement: SmallInt;
 | 
						|
    Orientation: SmallInt;
 | 
						|
    Weight: SmallInt;
 | 
						|
    Italic: Byte;
 | 
						|
    UnderLine: Byte;
 | 
						|
    Strikeout: Byte;
 | 
						|
    CharSet: Byte;
 | 
						|
    OutPrecision: Byte;
 | 
						|
    ClipPrecision: Byte;
 | 
						|
    Quality: Byte;
 | 
						|
    PitchAndFamily: byte;
 | 
						|
    // FaceName will be handled separately
 | 
						|
  end;
 | 
						|
  PWMFFontRecord = ^TWMFFontRecord;
 | 
						|
 | 
						|
  TWMFPenRecord = packed record
 | 
						|
    Style: Word;
 | 
						|
    Width: Word;
 | 
						|
    Ignored1: Word;
 | 
						|
    ColorRED: Byte;
 | 
						|
    ColorGREEN: Byte;
 | 
						|
    ColorBLUE: Byte;
 | 
						|
    Ignored2: Byte;
 | 
						|
  end;
 | 
						|
  PWMFPenRecord = ^TWMFPenRecord;
 | 
						|
 | 
						|
  TWMFPointRecord = packed record
 | 
						|
    Y, X: SmallInt;             // reverse order as through-out wmf
 | 
						|
  end;
 | 
						|
  PWMFPointRecord = ^TWMFPointRecord;
 | 
						|
 | 
						|
  TWMFPointXYRecord = packed record
 | 
						|
    X, Y: SmallInt;             // Regular order (x,y) as needed by polygons
 | 
						|
  end;
 | 
						|
  PWMFPointXYRecord = ^TWMFPointXYRecord;
 | 
						|
 | 
						|
  TWMFStretchDIBRecord = packed record
 | 
						|
    RasterOperation: DWord;
 | 
						|
    ColorUsage: Word;
 | 
						|
    SrcHeight: SmallInt;
 | 
						|
    SrcWidth: SmallInt;
 | 
						|
    SrcY: SmallInt;
 | 
						|
    SrcX: SmallInt;
 | 
						|
    DestHeight: SmallInt;
 | 
						|
    DestWidth: SmallInt;
 | 
						|
    DestX: SmallInt;
 | 
						|
    DestY: SmallInt;
 | 
						|
    // the remainder is handled separately:
 | 
						|
    // - TWMFBitmapCoreHeader or TWMFBitmapInfoHeader
 | 
						|
    // - optional: Colors
 | 
						|
    // - BitmapBuffer
 | 
						|
    //
 | 
						|
  end;
 | 
						|
  PWMFStretchDIBRecord = ^TWMFStretchDIBRecord;
 | 
						|
 | 
						|
  TWMFBitmapCoreHeader = packed record
 | 
						|
    HeaderSize: DWord;
 | 
						|
    Width: Word;
 | 
						|
    Height: Word;
 | 
						|
    Planes: Word;
 | 
						|
    BitCount: Word;
 | 
						|
  end;
 | 
						|
  PWMFBitmapCoreHeader = ^TWMFBitmapCoreHeader;
 | 
						|
 | 
						|
  TWMFBitmapInfoHeader = packed record
 | 
						|
    HeaderSize: DWord;
 | 
						|
    Width: LongInt;
 | 
						|
    Height: LongInt;
 | 
						|
    Planes: Word;
 | 
						|
    BitCount: Word;
 | 
						|
    Compression: DWord;
 | 
						|
    ImageSize: DWord;
 | 
						|
    XPelsPerMeter: DWord;
 | 
						|
    YPelsPerMeter: DWord;
 | 
						|
    ColorsUsed: DWord;
 | 
						|
    ColorImporant: DWord;
 | 
						|
  end;
 | 
						|
  PWMFBitmapInfoHeader = ^TWMFBitmapInfoHeader;
 | 
						|
 | 
						|
const
 | 
						|
  // WMF Magic number in Placeable Meta Header
 | 
						|
  WMF_MAGIC_NUMBER = $9AC6CDD7;
 | 
						|
 | 
						|
  // WMF Record types
 | 
						|
  META_EOF = $0000;
 | 
						|
  META_REALIZEPALETTE = $0035;
 | 
						|
  META_SETPALENTRIES = $0037;
 | 
						|
  META_SETBKMODE = $0102;
 | 
						|
  META_SETMAPMODE = $0103;
 | 
						|
  META_SETROP2 = $0104;
 | 
						|
  META_SETRELABS = $0105;
 | 
						|
  META_SETPOLYFILLMODE = $0106;
 | 
						|
  META_SETSTRETCHBLTMODE = $0107;
 | 
						|
  META_SETTEXTCHAREXTRA = $0108;
 | 
						|
  META_RESTOREDC = $0127;
 | 
						|
  META_RESIZEPALETTE = $0139;
 | 
						|
  META_DIBCREATEPATTERNBRUSH = $0142;
 | 
						|
  META_SETLAYOUT = $0149;
 | 
						|
  META_SETBKCOLOR = $0201;
 | 
						|
  META_SETTEXTCOLOR = $0209;
 | 
						|
  META_OFFSETVIEWPORTORG = $0211;
 | 
						|
  META_LINETO = $0213;
 | 
						|
  META_MOVETO = $0214;
 | 
						|
  META_OFFSETCLIPRGN = $0220;
 | 
						|
  META_FILLREGION = $0228;
 | 
						|
  META_SETMAPPERFLAGS = $0231;
 | 
						|
  META_SELECTPALETTE = $0234;
 | 
						|
  META_POLYGON = $0324;
 | 
						|
  META_POLYLINE = $0325;
 | 
						|
  META_SETTEXTJUSTIFICATION = $020A;
 | 
						|
  META_SETWINDOWORG = $020B;
 | 
						|
  META_SETWINDOWEXT = $020C;
 | 
						|
  META_SETVIEWPORTORG = $020D;
 | 
						|
  META_SETVIEWPORTEXT = $020E;
 | 
						|
  META_OFFSETWINDOWORG = $020F;
 | 
						|
  META_SCALEWINDOWEXT = $0410;
 | 
						|
  META_SCALEVIEWPORTEXT = $0412;
 | 
						|
  META_EXCLUDECLIPRECT = $0415;
 | 
						|
  META_INTERSECTCLIPRECT = $0416;
 | 
						|
  META_ELLIPSE = $0418;
 | 
						|
  META_FLOODFILL = $0419;
 | 
						|
  META_FRAMEREGION = $0429;
 | 
						|
  META_ANIMATEPALETTE = $0436;
 | 
						|
  META_TEXTOUT = $0521;
 | 
						|
  META_POLYPOLYGON = $0538;
 | 
						|
  META_EXTFLOODFILL = $0548;
 | 
						|
  META_RECTANGLE = $041B;
 | 
						|
  META_SETPIXEL = $041F;
 | 
						|
  META_ROUNDRECT = $061C;
 | 
						|
  META_PATBLT = $061D;
 | 
						|
 | 
						|
  META_SAVEDC = $001E;
 | 
						|
  META_PIE = $081A;
 | 
						|
  META_STRETCHBLT = $0B23;
 | 
						|
  META_ESCAPE = $0626;
 | 
						|
  META_INVERTREGION = $012A;
 | 
						|
  META_PAINTREGION = $012B;
 | 
						|
  META_SELECTCLIPREGION = $012C;
 | 
						|
  META_SELECTOBJECT = $012D;
 | 
						|
  META_SETTEXTALIGN = $012E;
 | 
						|
  META_ARC = $0817;
 | 
						|
  META_CHORD = $0830;
 | 
						|
  META_BITBLT = $0922;
 | 
						|
  META_EXTTEXTOUT = $0a32;
 | 
						|
  META_SETDIBTODEV = $0d33;
 | 
						|
  META_DIBBITBLT = $0940;
 | 
						|
  META_DIBSTRETCHBLT = $0b41;
 | 
						|
  META_STRETCHDIB = $0f43;
 | 
						|
  META_DELETEOBJECT = $01f0;
 | 
						|
  META_CREATEPALETTE = $00f7;
 | 
						|
  META_CREATEPATTERNBRUSH = $01F9;
 | 
						|
  META_CREATEPENINDIRECT = $02FA;
 | 
						|
  META_CREATEFONTINDIRECT = $02FB;
 | 
						|
  META_CREATEBRUSHINDIRECT = $02FC;
 | 
						|
  META_CREATEREGION = $06FF;
 | 
						|
 | 
						|
  // Brush styles
 | 
						|
  BS_SOLID = $0000;
 | 
						|
  BS_NULL = $0001;
 | 
						|
  BS_HATCHED = $0002;
 | 
						|
  BS_PATTERN = $0003;
 | 
						|
  BS_INDEXED = $0004;
 | 
						|
  BS_DIBPATTERN = $0005;
 | 
						|
  BS_DIBPATTERNPT = $0006;
 | 
						|
  BS_PATTERN8X8 = $0007;
 | 
						|
  BS_DIBPATTERN8X8 = $0008;
 | 
						|
  BS_MONOPATTERN = $0009;
 | 
						|
 | 
						|
  // Character sets
 | 
						|
  ANSI_CHARSET = $00000000;
 | 
						|
  DEFAULT_CHARSET = $00000001;
 | 
						|
  SYMBOL_CHARSET = $00000002;
 | 
						|
  MAC_CHARSET = $0000004D;
 | 
						|
  SHIFTJIS_CHARSET = $00000080;
 | 
						|
  HANGUL_CHARSET = $00000081;
 | 
						|
  JOHAB_CHARSET = $00000082;
 | 
						|
  GB2312_CHARSET = $00000086;
 | 
						|
  CHINESEBIG5_CHARSET = $00000088;
 | 
						|
  GREEK_CHARSET = $000000A1;
 | 
						|
  TURKISH_CHARSET = $000000A2;
 | 
						|
  VIETNAMESE_CHARSET = $000000A3;
 | 
						|
  HEBREW_CHARSET = $000000B1;
 | 
						|
  ARABIC_CHARSET = $000000B2;
 | 
						|
  BALTIC_CHARSET = $000000BA;
 | 
						|
  RUSSIAN_CHARSET = $000000CC;
 | 
						|
  THAI_CHARSET = $000000DE;
 | 
						|
  EASTEUROPE_CHARSET = $000000EE;
 | 
						|
  OEM_CHARSET = $000000FF;
 | 
						|
 | 
						|
  // ExtTextOutOptions flags
 | 
						|
  ETO_OPAQUE = $0002;
 | 
						|
  ETO_CLIPPED = $0004;
 | 
						|
  ETO_GLYPHINDEX = $0010;
 | 
						|
  ETO_RTLREADING = $0080;
 | 
						|
  ETO_NUMERICSLOCAL = $0400;
 | 
						|
  ETO_NUMERICSLATIN = $0800;
 | 
						|
  ETO_PDY = $2000;
 | 
						|
 | 
						|
  // Family font
 | 
						|
  FF_DONTCARE = $00;
 | 
						|
  FF_ROMAN = $01;
 | 
						|
  FF_SWISS = $02;
 | 
						|
  FF_MODERN = $03;
 | 
						|
  FF_SCRIPT = $04;
 | 
						|
  FF_DECORATIVE = $05;
 | 
						|
 | 
						|
  // Flood fill
 | 
						|
  FLOODFILLBORDER = $0000;
 | 
						|
  FLOODFILLSURFACE = $0001;
 | 
						|
 | 
						|
  // Font quality
 | 
						|
  DEFAULT_QUALITY = $00;
 | 
						|
  DRAFT_QUALITY = $01;
 | 
						|
  PROOF_QUALITY = $02;
 | 
						|
  NONANTIALIASED_QUALITY = $03;
 | 
						|
  ANTIALIASED_QUALITY = $04;
 | 
						|
  CLEARTYPE_QUALITY = $05;
 | 
						|
 | 
						|
  // Hatch style
 | 
						|
  HS_HORIZONTAL = $0000;
 | 
						|
  HS_VERTICAL = $0001;
 | 
						|
  HS_FDIAGONAL = $0002; // \\\
 | 
						|
  HS_BDIAGONAL = $0003; // ///
 | 
						|
  HS_CROSS = $0004;     // +++
 | 
						|
  HS_DIAGCROSS = $0005; // xxxx
 | 
						|
 | 
						|
  // Map mode
 | 
						|
  MM_TEXT = $0001;         // 1 logical unit = 1 device pixel. +x right, +y down
 | 
						|
  MM_LOMETRIC = $0002;     // 1 logical unit = 0.1 mm. +x right, +y up
 | 
						|
  MM_HIMETRIC = $0003;     // 1 logical unit = 0.01 mm. +x right, +y up
 | 
						|
  MM_LOENGLISH = $0004;    // 1 logical unit = 0.01 inch. +x right, +y up
 | 
						|
  MM_HIENGLISH = $0005;    // 1 logical unit = 0.001 inch. +x right, +y up
 | 
						|
  MM_TWIPS = $0006;        // 1 logical unit = 1/20 point = 1/1440 inch (twip). +x right, +y up
 | 
						|
  MM_ISOTROPIC = $0007;    // arbitrary units, equally scaled axes. --> META_SETWINDOWEXT, META_SETWINDOWORG
 | 
						|
  MM_ANISOTROPIC = $0008;  // arbitrary units, arbitrarily scaled axes.
 | 
						|
 | 
						|
  // Metafile enumeration
 | 
						|
  MEMORYMETAFILE = $0001;  // Metafile is stored in memory
 | 
						|
  DISKMETAFILE = $0002;    // ... on disk.
 | 
						|
 | 
						|
  // Background MixMode for text, hatched brushes and other nonsolid pen styles
 | 
						|
  BM_TRANSPARENT = $0001;
 | 
						|
  BM_OPAQUE = $0002;
 | 
						|
 | 
						|
  // Pen styles
 | 
						|
  PS_COSMETIC = $0000;
 | 
						|
  PS_ENDCAP_ROUND = $0000;
 | 
						|
  PS_JOIN_ROUND = $0000;
 | 
						|
  PS_SOLID = $0000;
 | 
						|
  PS_DASH = $0001;
 | 
						|
  PS_DOT = $0002;
 | 
						|
  PS_DASHDOT = $0003;
 | 
						|
  PS_DASHDOTDOT = $0004;
 | 
						|
  PS_NULL = $0005;
 | 
						|
  PS_INSIDEFRAME = $0006;
 | 
						|
  PS_USERSTYLE = $0007;
 | 
						|
  PS_ALTERNATE = $0008;
 | 
						|
  PS_ENDCAP_SQUARE = $0100;
 | 
						|
  PS_ENDCAP_FLAT = $0200;
 | 
						|
  PS_JOIN_BEVEL = $1000;
 | 
						|
  PS_JOIN_MITER = $2000;
 | 
						|
 | 
						|
  // PitchFont
 | 
						|
  DEFAULT_PITCH = 0;
 | 
						|
  FIXED_PITCH = 1;
 | 
						|
  VARIABLE_PITCH = 2;
 | 
						|
 | 
						|
  // PolyFillMode
 | 
						|
  ALTERNATE = $0001;
 | 
						|
  WINDING = $0002;
 | 
						|
 | 
						|
  // TextAlignment flags
 | 
						|
  TA_NOUPDATECP = $0000;
 | 
						|
  TA_LEFT = $0000;
 | 
						|
  TA_TOP = $0000;
 | 
						|
  TA_UPDATECP = $0001;
 | 
						|
  TA_RIGHT = $0002;
 | 
						|
  TA_CENTER = $0006;   // Value is correct ($0004 looks more reasonable, though)
 | 
						|
  TA_BOTTOM = $0008;
 | 
						|
  TA_BASELINE = $0018;
 | 
						|
  TA_RTLREADING = $0100;
 | 
						|
 | 
						|
  // Vertical text alignment flags
 | 
						|
  // Used if font has vertical baseline, such as Kanji.
 | 
						|
  VTA_TOP = $0000;
 | 
						|
  VTA_RIGHT = $0000;
 | 
						|
  VTA_BOTTOM = $0002;
 | 
						|
  VTA_CENTER = $0006;  // why not $0004?
 | 
						|
  VTA_BASELINE = $0018;
 | 
						|
 | 
						|
  // Ternary Raster Operations
 | 
						|
  BLACKNESS = $00;
 | 
						|
  NOTSRCERASE = $11;
 | 
						|
  NOTSRCCOPY = $33;
 | 
						|
  SRCERASE = $44;
 | 
						|
  DSTINVERT = $55;
 | 
						|
  SRCINVERT = $66;
 | 
						|
  MERGEPAINT = $BB;
 | 
						|
  MERGECOPY = $C0;
 | 
						|
  SRCCOPY = $CC;
 | 
						|
  SRCPAINT = $FF;
 | 
						|
  PATCOPY = $F0;
 | 
						|
  PATPAINT = $FB;
 | 
						|
  WHITENESS = $FF;
 | 
						|
  // ... plus many more...
 | 
						|
 | 
						|
  // Color usage
 | 
						|
  DIB_RGB_COLORS = $0000;
 | 
						|
  DIB_PAL_COLORS = $0001;
 | 
						|
  DIB_PAL_INDICES = $0002;
 | 
						|
 | 
						|
  // Compression
 | 
						|
  BI_RGB = $0000;
 | 
						|
  BI_RLE8 = $0001;
 | 
						|
  BI_RLE4 = $0002;
 | 
						|
  BI_BITFIELDS = $0003;
 | 
						|
  BI_JPEG = $0004;
 | 
						|
  BI_PNG = $0005;
 | 
						|
  BI_CMYK = $000B;
 | 
						|
  BI_CMYKRLE8 = $000C;
 | 
						|
  BI_CMYKRLE4 = $000D;
 | 
						|
 | 
						|
function WMF_GetRecordTypeName(ARecordType: Word): String;
 | 
						|
 | 
						|
implementation
 | 
						|
 | 
						|
function WMF_GetRecordTypeName(ARecordType: Word): String;
 | 
						|
begin
 | 
						|
  Result := '';
 | 
						|
  case ARecordType of
 | 
						|
    META_EOF : Result := 'META_EOF';
 | 
						|
    META_REALIZEPALETTE: Result := 'META_REALIZEPALETTE';
 | 
						|
    META_SETPALENTRIES: Result := 'META_SETPALENTRIES';
 | 
						|
    META_SETBKMODE: Result := 'META_SETBKMODE';
 | 
						|
    META_SETMAPMODE: Result := 'META_SETMAPMODE';
 | 
						|
    META_SETROP2: Result := 'META_SETROP2';
 | 
						|
    META_SETRELABS: Result := 'META_SETRELABS';
 | 
						|
    META_SETPOLYFILLMODE: Result := 'META_SETPOLYFILLMODE';
 | 
						|
    META_SETSTRETCHBLTMODE: Result := 'META_SETSTRETCHBLTMODE';
 | 
						|
    META_SETTEXTCHAREXTRA: Result := 'META_SETTEXTCHAREXTRA';
 | 
						|
    META_RESTOREDC: Result := 'META_RESTOREDC';
 | 
						|
    META_RESIZEPALETTE: Result := 'META_RESIZEPALETTE';
 | 
						|
    META_DIBCREATEPATTERNBRUSH: Result := 'META_DIBCREATEPATTERNBRUSH';
 | 
						|
    META_SETLAYOUT: Result := 'META_SETLAYOUT';
 | 
						|
    META_SETBKCOLOR: Result := 'META_SETBKCOLOR';
 | 
						|
    META_SETTEXTCOLOR: Result := 'META_SETTEXTCOLOR';
 | 
						|
    META_OFFSETVIEWPORTORG: Result := 'META_OFFSETVIEWPORTORG';
 | 
						|
    META_LINETO: Result := 'META_LINETO';
 | 
						|
    META_MOVETO: Result := 'META_MOVETO';
 | 
						|
    META_OFFSETCLIPRGN: Result := 'META_OFFSETCLIPRGN';
 | 
						|
    META_FILLREGION: Result := 'META_FILLREGION';
 | 
						|
    META_SETMAPPERFLAGS: Result := 'META_SETMAPPERFLAGS';
 | 
						|
    META_SELECTPALETTE: Result := 'META_SELECTPALETTE';
 | 
						|
    META_POLYGON: Result := 'META_POLYGON';
 | 
						|
    META_POLYLINE: Result := 'META_POLYLINE';
 | 
						|
    META_SETTEXTJUSTIFICATION: Result := 'META_SETTEXTJUSTIFICATION';
 | 
						|
    META_SETWINDOWORG: Result := 'META_SETWINDOWORG';
 | 
						|
    META_SETWINDOWEXT: Result := 'META_SETWINDOWEXT';
 | 
						|
    META_SETVIEWPORTORG: Result := 'META_SETVIEWPORTORG';
 | 
						|
    META_SETVIEWPORTEXT: Result := 'META_SETVIEWPORTEXT';
 | 
						|
    META_OFFSETWINDOWORG: Result := 'META_OFFSETWINDOWORG';
 | 
						|
    META_SCALEWINDOWEXT: Result := 'META_SCALEWINDOWEXT';
 | 
						|
    META_SCALEVIEWPORTEXT: Result := 'META_SCALEVIEWPORTEXT';
 | 
						|
    META_EXCLUDECLIPRECT: Result := 'META_EXCLUDECLIPRECT';
 | 
						|
    META_INTERSECTCLIPRECT: Result := 'META_INTERSECTCLIPRECT';
 | 
						|
    META_ELLIPSE: Result := 'META_ELLIPSE';
 | 
						|
    META_FLOODFILL: Result := 'META_FLOODFILL';
 | 
						|
    META_FRAMEREGION: Result := 'META_FRAMEREGION';
 | 
						|
    META_ANIMATEPALETTE: Result := 'META_ANIMATEPALETTE';
 | 
						|
    META_TEXTOUT: Result := 'META_TEXTOUT';
 | 
						|
    META_POLYPOLYGON: Result := 'META_POLYPOLYGON';
 | 
						|
    META_EXTFLOODFILL: Result := 'META_EXTFLOODFILL';
 | 
						|
    META_RECTANGLE: Result := 'META_RECTANGLE';
 | 
						|
    META_SETPIXEL: Result := 'META_SETPIXEL';
 | 
						|
    META_ROUNDRECT: Result := 'META_ROUNDRECT';
 | 
						|
    META_PATBLT: Result := 'META_PATBLT';
 | 
						|
    META_SAVEDC: Result := 'META_SAVEDC';
 | 
						|
    META_PIE: Result := 'META_PIE';
 | 
						|
    META_STRETCHBLT: Result := 'META_STRETCHBLT';
 | 
						|
    META_ESCAPE: Result := 'META_ESCAPE';
 | 
						|
    META_INVERTREGION: Result := 'META_INVERTREGION';
 | 
						|
    META_PAINTREGION: Result := 'META_PAINTREGION';
 | 
						|
    META_SELECTCLIPREGION: Result := 'META_SELECTCLIPREGION';
 | 
						|
    META_SELECTOBJECT: Result := 'META_SELECTOBJECT';
 | 
						|
    META_SETTEXTALIGN: Result := 'META_SETTEXTALIGN';
 | 
						|
    META_ARC: Result := 'META_ARC';
 | 
						|
    META_CHORD: Result := 'META_CHORD';
 | 
						|
    META_BITBLT: Result := 'META_BITBLT';
 | 
						|
    META_EXTTEXTOUT: Result := 'META_EXTTEXTOUT';
 | 
						|
    META_SETDIBTODEV: Result := 'META_SETDIBTODEV';
 | 
						|
    META_DIBBITBLT: Result := 'META_DIBBITBLT';
 | 
						|
    META_DIBSTRETCHBLT: Result := 'META_DIBSTRETCHBLT';
 | 
						|
    META_STRETCHDIB: Result := 'META_STRETCHDIB';
 | 
						|
    META_DELETEOBJECT: Result := 'META_DELETEOBJECT';
 | 
						|
    META_CREATEPALETTE: Result := 'META_CREATEPALETTE';
 | 
						|
    META_CREATEPATTERNBRUSH: Result := 'META_CREATEPATTERNBRUSH';
 | 
						|
    META_CREATEPENINDIRECT: Result := 'META_CREATEPENINDIRECT';
 | 
						|
    META_CREATEFONTINDIRECT: Result := 'META_CREATEFONTINDIRECT';
 | 
						|
    META_CREATEBRUSHINDIRECT: Result := 'META_CREATEBRUSHINDIRECT';
 | 
						|
    META_CREATEREGION: Result := 'META_CREATEREGION';
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
end.
 |