home *** CD-ROM | disk | FTP | other *** search
- {
- I am writing a Dos based Program in Turbo Pascal 6.0 that Uses a
- GUI Interface. My problem is that I would like to be able to import
- Windows or OS/2 icons to use instead of making my own. Does anyone
- know the File Format For either of these Files or better yet have
- source code For displaying them. Any help would be greatly appreciated.
-
- The following code is a Unit I wrote to handle Windows icon Files. I
- don't have the code yet For OS/2 icon Files, although I believe they are
- quite similar. As Far as displaying the icons, just pass a Pointer
- to the icon to your Graphics routines and let them decode and display
- the structures. You should also be able to use a subset of the
- structures to decode icons embedded in Windows .EXE Files.
-
- At offset $24 in the "new executable" header For Windows and OS/2 .EXE
- Files is a Word Variable that specifies an additional offset to the
- resource table.
- }
-
- Unit WinIcons;
-
- (********************************)Interface(*********************************)
-
- Type
- tBMPInfoHdr = Record
- vHdrSize, (* Always 40 For Windows icons *)
- vPixelWidth,
- vPixelHeight : LongInt;
- vColorPlanes, (* Should always be 1 *)
- vBitCount : Word;
- vCompression,
- vImageSize,
- vXPelsPerMeter,
- vYPelsPerMeter,
- vClrUsed,
- vClrImportant : LongInt;
- end;
-
- tWinIconColor = Record
- vBlue,
- vGreen,
- vRed,
- vUnused : Byte;
- end;
-
- tRGBTable = Array[0..15] of tWinIconColor;
-
- txorMask = Array[0..511] of Byte;
-
- tandMask = Array[0..127] of Byte;
-
- tWinIcon = Record (* The icon itself *)
- vBMPInfoHdr : tBMPInfoHdr;
- vRGBTable : tRGBTable;
- vxorMask : txorMask;
- vandMask : tandMask;
- end;
-
- tWinIconDirEntry = Record (* Icon File directory entry. *)
- vIconWidth, (* 1 For each icon in the File *)
- vIconHeight,
- vColorCount,
- vReserved : Byte;
- vPlanes,
- vBitCount : Word;
- vBytesInRes,
- vImageoffset : LongInt;
- end;
-
- (* The following two Arrays have to be sized at run-time as they can *)
- (* hold up to 65,535 entries. The actual number of entries is set by *)
- (* vIdCount. When reading an icon File, read in the vIdCount Variable *)
- (* and then use GetMem to allocate the correct amount of heap. *)
-
- tDirListPtr = ^tDirList;
- tDirList = Array[1..1] of tWinIconDirEntry;
-
- tIconListPtr = ^tIconList;
- tIconList = Array[1..1] of tWinIcon;
-
- tWinIconFileRec = Record
- vIdReserved,
- vIdType,
- vIdCount : Word;
- vDirList : tDirListPtr;
- vIconList : tIconListPtr;
- end;
-
-
- tWinIconFile = File of tWinIconFileRec;
-
- Var
- vWinIconFile : tWinIconFile; (* Hook to access icon Files *)
-
- (******************************)Implementation(******************************)
-
- end.