Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Delphi 2010 und PNG Ressourcen (https://www.delphipraxis.net/147176-delphi-2010-und-png-ressourcen.html)

v2afrank 3. Feb 2010 07:49


Delphi 2010 und PNG Ressourcen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
das Thema gab es zwar schon öfter, und es gab anscheinend auch schon eine Lösung, allerdings benutze ich jetzt Delphi 2010 und damit funktionieren die bisherigen Lösungen nicht.
Und zwar möcht ich ein PNG Bild aus einer Ressource in ein Image laden.
Dazu habe ich eine Ressourcendatei mit folgendem Inhalt erzeugt
Datumsbild PNG "Date.png". Ein Tip den ich hier gelesen hatte besagte, dass ich stattdessen Datumsbild RCDATA "Date.png" nutzen sollte, was aber auch keine Änderung brachte.
Geladen habe ich das Bild folgendermassen
Delphi-Quellcode:
var
 PNG  :TPNGObject;
begin
PNG := TPNGObject.Create;
try
  PNG.LoadFromResourceName(Handle,'Datumsbild');
  if PNG <> nil then
  begin
    Image1.Picture.Assign(PNG);
  end;
finally
  FreeAndNil(PNG);
end;
Hier wird mir aber immer eine EResNotFound Exception mit der Meldung 'Ressource Datumsbild nicht gefunden' aufgetreten.
Ist das bei Delphi 2010 anders, ober wo ist mein Fehler.
Ich habe das ganze Projekt auch mal hier als Anhang hochgeladen

turboPASCAL 3. Feb 2010 15:10

Re: Delphi 2010 und PNG Ressourcen
 
ersetze mal die Zeile:
Code:
Datumsbild PNG "Date.png"
wieder durch:
Code:
Datumsbild rcdata "Date.png"
in der Datei "bild.rc".

// Edit:

und Ersetze mal die Zeile:
Delphi-Quellcode:
PNG.LoadFromResourceName(Handle,'Datumsbild');
durch:
Delphi-Quellcode:
PNG.LoadFromResourceName(hInstance,'Datumsbild');
damit es auch aus der Resource geladen wird und nicht aus dem Fensterhandle. ;)

s.h.a.r.k 3. Feb 2010 15:50

Re: Delphi 2010 und PNG Ressourcen
 
Warnt dich dein Delphi nicht, dass du TPNGImage nutzen sollst, anstatt TPNGObject!? So mache ich das immer:

Delphi-Quellcode:
var
  png : TPngImage;
begin
  // Hintergrund laden
  png := TPngImage.Create();
  try
    png.LoadFromResourceName(HInstance,'IMAGE_NAME');

    // PNG in Image anzeigen ( imgExample: TImage )
    if (Assigned(png)) then
      imgExample.Picture.Assign(png);
  finally
    FreeAndNil(png);
  end;
end;

v2afrank 4. Feb 2010 06:33

Re: Delphi 2010 und PNG Ressourcen
 
Oh mein Gott. Manchmal sieht man den Wald vor lauter Bäumen nicht. Natürlich muss ich HInstance nehmen. Damit funktioniert es auch problemlos. Und s.h.a.r.k hat auch Recht. Mein Delphi warnt mich, ich habe da aber absolut nicht drauf geachtet.

Uwe Raabe 4. Feb 2010 07:17

Re: Delphi 2010 und PNG Ressourcen
 
Du kannst die ja auch mal die PngComponents anschauen. Da gibt es eine TPngImageCollection, in der zur Entwurfszeit PngImages unterschiedlicher Größe geladen werden können. Zur Laufzeit hast du dann bereits ein fertiges TPngImage verfügbar. Den Umweg über die Resource kannst du dir dann sparen.

v2afrank 4. Feb 2010 07:24

Re: Delphi 2010 und PNG Ressourcen
 
Werde ich mir anschauen, hat sicherlich seinen Charme, da ich in meiner Anwendung jetzt zwischen verschiedenen PNG Images umschalten muss.

Uwe Raabe 4. Feb 2010 08:07

Re: Delphi 2010 und PNG Ressourcen
 
Wenn die Images alle gleiche Größe haben, ist auch eine ImageList (TImageList oder TPngImageList) möglich. Die Collection erlaubt auch Bilder unerschiedlicher Größe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr.

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