Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TResourceStream - BITMAP - Verständnisfrage (https://www.delphipraxis.net/95049-tresourcestream-bitmap-verstaendnisfrage.html)

x000x 29. Jun 2007 22:09


TResourceStream - BITMAP - Verständnisfrage
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin moin,

gegeben ist folgende RC Datei:
Code:
TESTONE  BITMAP  "one.bmp"
TESTTWO  BMP     "one.bmp"
Wenn ich mit
Delphi-Quellcode:
... TResourceStream.Create(hInstance, 'TESTONE', 'BITMAP');
den Stream erstellen will, bekomm ich einen Fehler. (Resource TESTONE wurde nicht gefunden)
Mit
Delphi-Quellcode:
... TResourceStream.Create(hInstance, 'TESTTWO', 'BMP');
funktioniert es.
Ich hab mal zum nachstellen ein kleines Demoprojekt angehangen.
Kann mir jemand erklären, warum das so ist?

NACHTRAG:
Bei LoadBitmap ist es genau anders herum:
Delphi-Quellcode:
Bmp.Handle := LoadBitmap(hInstance, 'TESTONE'); // funktioniert
Bmp.Handle := LoadBitmap(hInstance, 'TESTTWO'); // funktioniert nicht

SirThornberry 29. Jun 2007 22:48

Re: TResourceStream - Verständnisfrage
 
BITMAP in der Ressource ist ein reserviertes Wort für den Typ Bitmap welcher in Delphi die Constante RT_BITMAP haben müsste.

x000x 30. Jun 2007 00:22

Re: TResourceStream - Verständnisfrage
 
Ok, erstmal danke aber
Delphi-Quellcode:
rs := TResourceStream.Create(hInstance, 'TESTONE', RT_BITMAP);
gibt mir jetzt den Fehler: Bitmap ist ungültig
Auch die Reduzierung auf 256 Farben bringt keine Änderung.
Es muss doch dafür eine Erklärung geben?


Luckie hat hier eigentlich die selbe Frage gestellt, hab ich nur eben erst gesehen. Nur eine Erklärung ist dort auch noch offen...

SirThornberry 30. Jun 2007 06:37

Re: TResourceStream - BITMAP - Verständnisfrage
 
wie bereits erwähnt ist der Typ "BITMAP" ein reservierter. Dabei wird die Datei nicht wie üblich einfach 1 zu 1 in die Ressource übernommen. Daher funktioniert es wohl mit dem Laden aus einem RessourceStream nicht weil eben nur noch die notwendigsten Infos in der Ressource sind (bei meinen Tests war die Ressource 14 Byte kleiner als das eigentliche Bild).

Du kannst die Bitmapressource aber wie folgt laden:
Delphi-Quellcode:
var
  lBmp   : TBitmap;
begin
  lBmp := TBitmap.Create();
  try
    lBmp.LoadFromResourceName(HInstance, 'TESTONE');
    //do something like that: Image1.Picture.Graphic := lBmp;
  finally
    lBmp.Free;
  end;

x000x 30. Jun 2007 23:32

Re: TResourceStream - BITMAP - Verständnisfrage
 
Hallo Jens,
Zitat:

Zitat von SirThornberry
... Dabei wird die Datei nicht wie üblich einfach 1 zu 1 in die Ressource übernommen. Daher funktioniert es wohl mit dem Laden aus einem RessourceStream nicht weil eben nur noch die notwendigsten Infos in der Ressource sind (bei meinen Tests war die Ressource 14 Byte kleiner als das eigentliche Bild).

das ist ne einleuchtende Erklärung, danke dir für deine Mühe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz