Einzelnen Beitrag anzeigen

whiteF

Registriert seit: 14. Okt 2008
45 Beiträge
 
#1

Funktion: Graphic anhand des Namens aus Res erstellen

  Alt 16. Feb 2016, 20:31
Hallo,
ich wollte aus meiner Resource eine Grafik in ein TImage laden.

Gif, Png, bmp, jpg, klappt alles in einer seperaten procedure.

nun wollte ich mir eine funktion basteln, die mit einem befehl automatisch ein bildtyp in der ressource erkennt und das daraus resultierende ergebnis per graphic dem TImage übergeben.

Leider klappt dies nicht wirklich.
Ich poste euch mal mein Code.
Vlt. hat jemand zeit und findet mein Fehler.

Vielen Dank schonmal im voraus!

Res-Datei:
Delphi-Quellcode:
bild_bmp BITMAP "bmp.bmp"
bild_jpg RCDATA "jpg.jpg"
bild_png RCDATA "png.png"
bild_gif RCDATA "gif.gif"
Form1 auszugsweise:
Delphi-Quellcode:
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, JPEG, PNGImage, GIFImg;

...

function GetGraphicFromResource(Name: String): TGraphic;
var
  RS: TResourceStream;
  ImageBMP : TBitmap;
  ImageJPG : TJPEGImage;
  ImagePNG : TPNGImage;
  ImageGif : TGIFImage;
  FileExtension : String;
  Graphic : TGraphic;
begin
  FileExtension := LowerCase(Copy(Name, Length(Name)-2, 3));

  Graphic := TGraphic.Create;
  Graphic := nil;

  RS := TResourceStream.Create(hInstance, Name, RT_RCDATA);
  try

    if FileExtension = LowerCase('bmp') then
    begin
      ImageBMP := TBitmap.Create;
      try
        ImageBMP.LoadFromStream(RS);
        Graphic := ImageBMP;
      finally
        ImageBMP.Free;
      end;
    end;

    if FileExtension = LowerCase('jpg') then
    begin
      ImageJPG := TJPEGImage.Create;
      try
        ImageJPG.LoadFromStream(RS);
        Graphic := ImageJPG;
      finally
        ImageJPG.Free;
      end;
    end;

    if FileExtension = LowerCase('jpeg') then
    begin
      ImageJPG := TJPEGImage.Create;
      try
        ImageJPG.LoadFromStream(RS);
        Graphic := ImageJPG;
      finally
        ImageJPG.Free;
      end;
    end;

    if FileExtension = LowerCase('png') then
    begin
      ImagePNG := TPNGImage.Create;
      try
        ImagePNG.LoadFromStream(RS);
        Graphic := ImagePNG;
      finally
        ImagePNG.Free;
      end;
    end;

    if FileExtension = LowerCase('gif') then
    begin
      ImageGif := TGIFImage.Create;
      try
        ImageGif.LoadFromStream(RS);
        Graphic := ImageGif;
      finally
        ImageGif.Free;
      end;
    end;
  finally
    RS.Free;
  end;

  if Graphic <> nil then
  begin
    showmessage('gr vorhanden');
    //Form1.image1.Picture.Graphic := graphic;

    //showmessage('gr vorhanden');
    Result := Graphic;
  end;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  image1.Picture.Graphic := nil;
  image1.Picture.Graphic := (GetGraphicFromResource('bild_jpg'));
  //image1.Picture.Graphic.Assign(GetGraphicFromResource('bild_jpg'));
end;
  Mit Zitat antworten Zitat