home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / win_os2.swg / 0004_WINICONS.PAS.pas < prev    next >
Pascal/Delphi Source File  |  1993-05-28  |  3KB  |  98 lines

  1. {
  2.  I am writing a Dos based Program in Turbo Pascal 6.0 that Uses a
  3.  GUI Interface. My problem is that I would like to be able to import
  4.  Windows or OS/2 icons to use instead of making my own. Does anyone
  5.  know the File Format For either of these Files or better yet have
  6.  source code For displaying them. Any help would be greatly appreciated.
  7.  
  8. The following code is a Unit I wrote to handle Windows icon Files. I
  9. don't have the code yet For OS/2 icon Files, although I believe they are
  10. quite similar. As Far as displaying the icons, just pass a Pointer
  11. to the icon to your Graphics routines and let them decode and display
  12. the structures. You should also be able to use a subset of the
  13. structures to decode icons embedded in Windows .EXE Files.
  14.  
  15. At offset $24 in the "new executable" header For Windows and OS/2 .EXE
  16. Files is a Word Variable that specifies an additional offset to the
  17. resource table.
  18. }
  19.  
  20. Unit WinIcons;
  21.  
  22. (********************************)Interface(*********************************)
  23.  
  24. Type
  25.   tBMPInfoHdr = Record
  26.     vHdrSize,                 (* Always 40 For Windows icons *)
  27.     vPixelWidth,
  28.     vPixelHeight   : LongInt;
  29.     vColorPlanes,             (* Should always be 1 *)
  30.     vBitCount      : Word;
  31.     vCompression,
  32.     vImageSize,
  33.     vXPelsPerMeter,
  34.     vYPelsPerMeter,
  35.     vClrUsed,
  36.     vClrImportant  : LongInt;
  37.   end;
  38.  
  39.   tWinIconColor = Record
  40.     vBlue,
  41.     vGreen,
  42.     vRed,
  43.     vUnused : Byte;
  44.   end;
  45.  
  46.   tRGBTable = Array[0..15] of tWinIconColor;
  47.  
  48.   txorMask = Array[0..511] of Byte;
  49.  
  50.   tandMask = Array[0..127] of Byte;
  51.  
  52.   tWinIcon = Record                (* The icon itself *)
  53.     vBMPInfoHdr : tBMPInfoHdr;
  54.     vRGBTable   : tRGBTable;
  55.     vxorMask    : txorMask;
  56.     vandMask    : tandMask;
  57.   end;
  58.  
  59.   tWinIconDirEntry = Record        (* Icon File directory entry.  *)
  60.     vIconWidth,                    (* 1 For each icon in the File *)
  61.     vIconHeight,
  62.     vColorCount,
  63.     vReserved    : Byte;
  64.     vPlanes,
  65.     vBitCount    : Word;
  66.     vBytesInRes,
  67.     vImageoffset : LongInt;
  68.   end;
  69.  
  70.   (* The following two Arrays have to be sized at run-time as they can  *)
  71.   (* hold up to 65,535 entries. The actual number of entries is set by  *)
  72.   (* vIdCount. When reading an icon File, read in the vIdCount Variable *)
  73.   (* and then use GetMem to allocate the correct amount of heap.        *)
  74.  
  75.   tDirListPtr = ^tDirList;
  76.   tDirList    = Array[1..1] of tWinIconDirEntry;
  77.  
  78.   tIconListPtr = ^tIconList;
  79.   tIconList    = Array[1..1] of tWinIcon;
  80.  
  81.   tWinIconFileRec = Record
  82.     vIdReserved,
  83.     vIdType,
  84.     vIdCount     : Word;
  85.     vDirList     : tDirListPtr;
  86.     vIconList    : tIconListPtr;
  87.   end;
  88.  
  89.  
  90.   tWinIconFile = File of tWinIconFileRec;
  91.  
  92. Var
  93.   vWinIconFile : tWinIconFile; (* Hook to access icon Files *)
  94.  
  95. (******************************)Implementation(******************************)
  96.  
  97. end.
  98.