[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]

    {
     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.

[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]