home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 October / Chip_2001-10_cd1.bin / zkuste / delphi / kompon / d123456 / CHEMPLOT.ZIP / TPlot / resourcefix.pas < prev    next >
Pascal/Delphi Source File  |  2001-05-09  |  3KB  |  105 lines

  1. From - Fri Mar 30 14:19:56 2001
  2. From: Stefan Hoffmeister <Borland.Newsgroups@econos.com>
  3. Newsgroups: borland.public.kylix.graphics
  4. Subject: Re: "invalid resource format" can't load bitmap resource
  5. Date: Thu, 29 Mar 2001 13:27:57 +0200
  6. Organization: .
  7. Message-ID: <7a66ctc0n94kontjf4npp34h2um6kuelcv@4ax.com>
  8. References: <3ABFE809.6D23B688@molsci.csiro.au>
  9. X-Newsreader: Forte Agent 1.8/32.548
  10. MIME-Version: 1.0
  11. Content-Type: text/plain; charset=us-ascii
  12. Content-Transfer-Encoding: 7bit
  13. NNTP-Posting-Host: 62.226.148.65
  14. X-Trace: 29 Mar 2001 03:25:47 -0800, 62.226.148.65
  15. Lines: 86
  16. Path: dnews!62.226.148.65
  17. Xref: dnews borland.public.kylix.graphics:148
  18.  
  19. >    TheBitmap.LoadFromResourceID(HInstance, IMAGE_BASE + i);
  20.  
  21. >under Kylix, i get the error message:
  22. >
  23. >"EInvalidGraphicOperation: Image format not recognized. Process stopped
  24. >..."
  25.  
  26. Yep.
  27.  
  28. Try replacing the code in QGraphics with the piece below; as Jon
  29. indicates, some fixup is missing.
  30.  
  31. This at least no longer throws an exception, but I don't know what this
  32. code is supposed to do.
  33.  
  34. *************
  35.  
  36. procedure LoadBitmapFromResourceStream(ABitmap: TBitmap; ResourceStream:
  37. TCustomMemoryStream);
  38. var
  39.   TmpStream: TMemoryStream;
  40.   Header: TBitmapFileHeader;
  41.   BmpHeader: TBitMapInfoHeader;
  42. begin
  43.   TmpStream := TMemoryStream.Create;
  44.   try
  45.     // Reads bitmap header
  46.     ResourceStream.ReadBuffer(BmpHeader, SizeOf(BmpHeader));
  47.     ResourceStream.Seek(0, soBeginning);
  48.  
  49.     // Builds file header
  50.     FillChar(Header, SizeOf(Header), 0);
  51.     Header.bfType := $4D42;
  52.     Header.bfSize := ResourceStream.Size;
  53.     Header.bfReserved1 := 0;
  54.     Header.bfReserved2 := 0;
  55.  
  56.     if BmpHeader.biBitCount > 8 then
  57.       Header.bfOffBits := sizeof(Header) + sizeof(BmpHeader)
  58.     else
  59.       if BmpHeader.biClrUsed = 0 then
  60.         Header.bfOffBits := sizeof(Header) + sizeof(BmpHeader) + (1 shl
  61. BmpHeader.biBitCount) * 4
  62.       else
  63.         Header.bfOffBits := sizeof(Header) + sizeof(BmpHeader) +
  64. BmpHeader.biClrUsed * 4;
  65.  
  66.     // Concatenates both in TmpStream
  67.     TmpStream.WriteBuffer(Header, SizeOf(Header));
  68.     TmpStream.CopyFrom(ResourceStream, ResourceStream.Size);
  69.     TmpStream.Position := 0;
  70.     ABitmap.LoadFromStream(TmpStream);
  71.   finally
  72.     TmpStream.Free;
  73.   end;
  74. end;
  75.  
  76. procedure TBitmap.LoadFromResourceName(Instance: Cardinal; const
  77. ResName: string);
  78. var
  79.   Stream: TCustomMemoryStream;
  80. begin
  81.   Stream := TResourceStream.Create(Instance, ResName, RT_BITMAP);
  82.   try
  83.     LoadBitmapFromResourceStream(Self, Stream);
  84.   finally
  85.     Stream.Free;
  86.   end;
  87. end;
  88.  
  89. procedure TBitmap.LoadFromResourceID(Instance: Cardinal; ResID:
  90. Integer);
  91. var
  92.   Stream: TCustomMemoryStream;
  93. begin
  94.   Stream := TResourceStream.CreateFromID(Instance, ResID, RT_BITMAP);
  95.   try
  96.     LoadBitmapFromResourceStream(Self, Stream);
  97.   finally
  98.     Stream.Free;
  99.   end;
  100. end;
  101.  
  102. -- 
  103. NNQ - Quoting Style in Newsgroup Postings
  104.   http://web.infoave.net/~dcalhoun/nnq/nquote.html
  105.