- F:=TFileStream.Create(FileName,fmOpenRead);
- F.Read(Header.idReserved,SizeOf(Header.idReserved));
- F.Read(Header.idType,SizeOf(Header.idType));
- F.Read(Header.idCount,SizeOf(Header.idCount));
- SetLength(Header.idEntries,Header.idCount);
- for i:=1 to Header.idCount do begin
- F.Read(Header.idEntries[i-1].bWidth,SizeOf(Header.idEntries[i-1].bWidth));
- F.Read(Header.idEntries[i-1].bHeight,SizeOf(Header.idEntries[i-1].bHeight));
- F.Read(Header.idEntries[i-1].bColorCount,SizeOf(Header.idEntries[i-1].bColorCount));
- F.Read(Header.idEntries[i-1].bReserved,SizeOf(Header.idEntries[i-1].bReserved));
- F.Read(Header.idEntries[i-1].wPlanes,SizeOf(Header.idEntries[i-1].wPlanes));
- F.Read(Header.idEntries[i-1].wBitCount,SizeOf(Header.idEntries[i-1].wBitCount));
- F.Read(Header.idEntries[i-1].dwBytesInRes,SizeOf(Header.idEntries[i-1].dwBytesInRes));
- F.Read(Header.idEntries[i-1].dwImageOffset,SizeOf(Header.idEntries[i-1].dwImageOffset));
- end;
- for i:=Low(Header.idEntries) to High(Header.idEntries) do begin
- F.Seek(Header.idEntries[i].dwImageOffset,SoFromBeginning);
- F.Read(Header.idEntries[i].IconImage.icHeader,SizeOf(Header.idEntries[i].IconImage.icHeader));
- //Bis hier stimmt alles 100%ig!!
- SetLength(Header.idEntries[i].IconImage.icColors,Header.idEntries[i].IconImage.icHeader.biBitCount * 4);
- for j:=0 to Header.idEntries[i].IconImage.icHeader.biBitCount - 1 do begin
- F.Read(Header.idEntries[i].IconImage.icColors[j].rgbRed,SizeOf(Header.idEntries[i].IconImage.icColors[j].rgbRed));
- F.Read(Header.idEntries[i].IconImage.icColors[j].rgbGreen,SizeOf(Header.idEntries[i].IconImage.icColors[j].rgbGreen));
- F.Read(Header.idEntries[i].IconImage.icColors[j].rgbBlue,SizeOf(Header.idEntries[i].IconImage.icColors[j].rgbBlue));
- F.Read(Header.idEntries[i].IconImage.icColors[j].rgbReserved,SizeOf(Header.idEntries[i].IconImage.icColors[j].rgbReserved));
- end;
- SetLength(Header.idEntries[i].IconImage.icXOR,Round((Header.idEntries[i].bWidth * Header.idEntries[i].bHeight) * Header.idEntries[i].IconImage.icHeader.biBitCount));
- for j:=Low(Header.idEntries[i].IconImage.icXOR) to High(Header.idEntries[i].IconImage.icXOR) do
- F.Read(Header.idEntries[i].IconImage.icXOR[j],SizeOf(Header.idEntries[i].IconImage.icXOR[j]));
- SetLength(Header.idEntries[i].IconImage.icAND,Round((Header.idEntries[i].bWidth * Header.idEntries[i].bHeight)));
- for j:=Low(Header.idEntries[i].IconImage.icAND) to High(Header.idEntries[i].IconImage.icAND) do
- F.Read(Header.idEntries[i].IconImage.icAND[j],SizeOf(Header.idEntries[i].IconImage.icAND[j]));
- end;
- F.Free;
- Ico:=CreateIcon(hInstance,
- Header.idEntries[0].bWidth,
- Header.idEntries[0].bHeight,
- Header.idEntries[0].IconImage.icHeader.biPlanes,
- Header.idEntries[0].IconImage.icHeader.biBitCount,
- Header.idEntries[0].IconImage.icAND,
- Header.idEntries[0].IconImage.icXOR
- );