home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 October / Chip_2001-10_cd1.bin / zkuste / delphi / kompon / d123456 / CHEMPLOT.ZIP / TPlot / resourcefix.pas / text0000.txt < prev   
Encoding:
Text File  |  2001-05-09  |  2.3 KB  |  87 lines

  1. >    TheBitmap.LoadFromResourceID(HInstance, IMAGE_BASE + i);
  2.  
  3. >under Kylix, i get the error message:
  4. >
  5. >"EInvalidGraphicOperation: Image format not recognized. Process stopped
  6. >..."
  7.  
  8. Yep.
  9.  
  10. Try replacing the code in QGraphics with the piece below; as Jon
  11. indicates, some fixup is missing.
  12.  
  13. This at least no longer throws an exception, but I don't know what this
  14. code is supposed to do.
  15.  
  16. *************
  17.  
  18. procedure LoadBitmapFromResourceStream(ABitmap: TBitmap; ResourceStream:
  19. TCustomMemoryStream);
  20. var
  21.   TmpStream: TMemoryStream;
  22.   Header: TBitmapFileHeader;
  23.   BmpHeader: TBitMapInfoHeader;
  24. begin
  25.   TmpStream := TMemoryStream.Create;
  26.   try
  27.     // Reads bitmap header
  28.     ResourceStream.ReadBuffer(BmpHeader, SizeOf(BmpHeader));
  29.     ResourceStream.Seek(0, soBeginning);
  30.  
  31.     // Builds file header
  32.     FillChar(Header, SizeOf(Header), 0);
  33.     Header.bfType := $4D42;
  34.     Header.bfSize := ResourceStream.Size;
  35.     Header.bfReserved1 := 0;
  36.     Header.bfReserved2 := 0;
  37.  
  38.     if BmpHeader.biBitCount > 8 then
  39.       Header.bfOffBits := sizeof(Header) + sizeof(BmpHeader)
  40.     else
  41.       if BmpHeader.biClrUsed = 0 then
  42.         Header.bfOffBits := sizeof(Header) + sizeof(BmpHeader) + (1 shl
  43. BmpHeader.biBitCount) * 4
  44.       else
  45.         Header.bfOffBits := sizeof(Header) + sizeof(BmpHeader) +
  46. BmpHeader.biClrUsed * 4;
  47.  
  48.     // Concatenates both in TmpStream
  49.     TmpStream.WriteBuffer(Header, SizeOf(Header));
  50.     TmpStream.CopyFrom(ResourceStream, ResourceStream.Size);
  51.     TmpStream.Position := 0;
  52.     ABitmap.LoadFromStream(TmpStream);
  53.   finally
  54.     TmpStream.Free;
  55.   end;
  56. end;
  57.  
  58. procedure TBitmap.LoadFromResourceName(Instance: Cardinal; const
  59. ResName: string);
  60. var
  61.   Stream: TCustomMemoryStream;
  62. begin
  63.   Stream := TResourceStream.Create(Instance, ResName, RT_BITMAP);
  64.   try
  65.     LoadBitmapFromResourceStream(Self, Stream);
  66.   finally
  67.     Stream.Free;
  68.   end;
  69. end;
  70.  
  71. procedure TBitmap.LoadFromResourceID(Instance: Cardinal; ResID:
  72. Integer);
  73. var
  74.   Stream: TCustomMemoryStream;
  75. begin
  76.   Stream := TResourceStream.CreateFromID(Instance, ResID, RT_BITMAP);
  77.   try
  78.     LoadBitmapFromResourceStream(Self, Stream);
  79.   finally
  80.     Stream.Free;
  81.   end;
  82. end;
  83.  
  84. -- 
  85. NNQ - Quoting Style in Newsgroup Postings
  86.   http://web.infoave.net/~dcalhoun/nnq/nquote.html
  87.