Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi JPGs aus einer Resourcendatei laden (https://www.delphipraxis.net/156208-jpgs-aus-einer-resourcendatei-laden.html)

fiscch4 23. Nov 2010 22:30

JPGs aus einer Resourcendatei laden
 
Guten Abend,

ich versuche nun seit 3 abenden aus einer Resourcendatei ein JPG zu laden.

hier mal ein Beispiel wie ich vorgehe:

ich erstelle das Projekt

Delphi-Quellcode:
interface

uses
  JPEG, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, ImgList;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses ausgabe;

{$R *.dfm}
{$R 'bilder.RES' 'bilder.rc' }

procedure TForm1.FormCreate(Sender: TObject);
begin
    Image1.Picture.Bitmap.LoadFromResourceID(HInstance, 1);
end;

end.
die rc datei sieht so aus
1 RT_RCDATA "bild.jpg"
2 RT_RCDATA "images.jpg"


wenn ich das so ausführe kommt aber immer nur der Fehler:

"Im Projekt Test ist eine Exveption der Klasse EACCESSVIOLATION aufgetretn. Meldung: 'Zugriffsverletzung bei Adress 0040885C in Modul 'Test.exe'. Lesen von Adress 0000000001'. Porzess wurde angehalten..."

was mache ich falsch?
ich habe die RC datei über den BRCC32 in eine .RES umgewandelt
kann ich so keine JPGs laden oder wo ist mein Fehler?
ich möchte gerne die aus der Resource laden damit ich am Ende nur die Exe habe ;)


Vielen Dank für eure Antworten
fiscch4

Assarbad 23. Nov 2010 22:38

AW: JPGs aus einer Resourcendatei laden
 
JPEGs sind keine Bitmaps, oder?

Bummi 23. Nov 2010 22:38

AW: JPGs aus einer Resourcendatei laden
 
http://www.delphipraxis.net/75236-bi...tei-laden.html

fiscch4 24. Nov 2010 15:09

AW: JPGs aus einer Resourcendatei laden
 
Hallo,

danke schonmal für die schnellen antworten

aber ich möchte ja gerade nicht eine .dll bei der Exe haben sonder wenn möglich nur eine Exe am ende in der die Bilder integriert sind.

ist dies überhaupt möglich oder sollte ich am besten mit einer .dll arbeiten(habe ich noch nie gemacht)?

Vielen Dank

Bummi 24. Nov 2010 15:11

AW: JPGs aus einer Resourcendatei laden
 
Du brauchst keine DLL statt DLL-Handle verwendest Du HINSTANCE.

Das Zauberwort war LoadFromResourceName...

fiscch4 24. Nov 2010 15:14

AW: JPGs aus einer Resourcendatei laden
 
soll ich das dann mit Tresourcestream das ganze laden?

könntest du mir eventuell ein kurzes beispiel geben wie ich sowas mache?
wenn ich die .Res schon habe und auch eingebunden?

vielen dank

Bernhard Geyer 24. Nov 2010 15:19

AW: JPGs aus einer Resourcendatei laden
 
Ändere deinen Code mal nach:

Delphi-Quellcode:
 Image1.Picture.LoadFromResourceID(HInstance, 1);
Deine Image-Instanz hat ja noch kein Bild geladen. So ist u.U. das Bitmap-Property auch nil.
Ebenfalls solltest du eine JPEG (wie Assarbad angemerkt hat) direkt ins Image-Picture-Laden und nicht erst versuchen damit ein Bitmap zu beauftragen (was damit ja nix anfangen kann).

fiscch4 24. Nov 2010 15:31

AW: JPGs aus einer Resourcendatei laden
 
wenn ich den code änder kommt undefinierter Bezeichner LoadFormResourceID

funktioniert also leider nicht :(

ich kann mich leider erst morgen wieder melden
aber schonmal vielen vielen Dank

Bummi 24. Nov 2010 15:34

AW: JPGs aus einer Resourcendatei laden
 
sorry , ich hatte Dich in die falsche Ecke geschickt :pale:
Delphi-Quellcode:
procedure LoadPictureFromJpgResource(picture : TPicture;const AResName: string);
var
   rs: TResourceStream;
   jpg: TJPEGImage;
begin
   rs := TResourceStream.Create(HInstance,AResName,RT_RCDATA);
   jpg := TJPEGImage.Create;
   try
      jpg.LoadFromStream(rs);
      picture.Assign(jpg);
   finally
      jpg.Free;
      rs.Free;
   end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin

  LoadPictureFromJpgResource(Image1.Picture,'TEST2');
end;

fiscch4 24. Nov 2010 23:57

AW: JPGs aus einer Resourcendatei laden
 
Hallo,

ich weis nicht ob ich mich zu blöd anstelle aber wenn ich die Procedure oben registrieren will bringt einen fehler von wegen [Fehler] test.pas(40): Ungenügende Forward- oder External-Deklaration: 'TForm1.LoadPictureFromJpgResource'

dann habe ich es versucht das was in der Procedur normal abläuft in oncreat zu packen
aber dann sagt er nur Resource B1(RC sieht so aus:
B1 RT_RCDATA "test.jpg"
B2 RT_RCDATA "images.jpg"

ist umgewandelt und eigebunden) nicht.

muss ich sonst noch irgendwas beachten ich gehe mal davon aus das ich den Code richtig verstanden habe und AResName= in meinem Fall B1 ist
und picture in meinem Fall Image1.Picture

ich hoffe ich bringe das noch bis nächsten Mittwoch hin :)
soll ein Adventskalender werden mit Bildern ... :D

Also Vielen Dank
und Gute Nacht

Luckie 25. Nov 2010 00:13

AW: JPGs aus einer Resourcendatei laden
 
Ist die Routine auch eine Methode deines Formulars?

Bummi 25. Nov 2010 07:35

AW: JPGs aus einer Resourcendatei laden
 
Du hast wahrscheinlich die Deklaration von LoadPictureFromJpgResource
so vorgenommen
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Procedure LoadPictureFromJpgResource(....
  end;
Damit wäre es eine Methode der Klasse TForm1 und muß unterhalb von implementation auch so
Procedure TForm1.LoadPictureFromJpgResource(...
eigefügt werden.

Sinvoller ist aber, wenn Du es nicht gleich in eine UtilUnit packen willst
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

Procedure LoadPictureFromJpgResource(...

var
  Form1: TForm1;

implementation

fiscch4 25. Nov 2010 16:46

AW: JPGs aus einer Resourcendatei laden
 
Hallo,

also das mit der Procedure funktioniert jetzt soweit nur das immer noch die Fehlermeldung kommt das die Resource nicht gefunden wurde
hier mal der Quellcode komplett
Delphi-Quellcode:
unit testen;

interface

uses
  JPEG, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
procedure LoadPictureFromJpgResource(picture : TPicture;const AResName: string);
var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R bilder.RES}

procedure LoadPictureFromJpgResource(picture : TPicture;const AResName: string);
var
   rs: TResourceStream;
   jpg: TJPEGImage;
begin
   rs := TResourceStream.Create(HInstance,AResName,RT_RCDATA);
   jpg := TJPEGImage.Create;
   try
      jpg.LoadFromStream(rs);
      picture.Assign(jpg);
   finally
      jpg.Free;
      rs.Free;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

  LoadPictureFromJpgResource(Image1.Picture,'TEST2');
end;


end.
der Code von der bilder.RC datei die ich dann per drag and drop in die BRCC32.exe schieb und eine bilder.RES rausbekommen
Code:
TEST1 RT_RCDATA "C:\Users\Public\Documents\delphi\test\test.jpg"
TEST2 RT_RCDATA "C:\Users\Public\Documents\delphi\test\images.jpg"
warum kann er die Resource nicht finden habe ich beim einbinden was falsch gemacht?
oder schon bei der Erstellung der bilder.RES?
der Rest würde denk ich funktionieren
Vielen Dank

PS: ich bin echt positiv überrascht das ihr so viel geduld habt... und mir helft ;)

rollstuhlfahrer 25. Nov 2010 16:58

AW: JPGs aus einer Resourcendatei laden
 
Zitat:

Zitat von fiscch4 (Beitrag 1064040)
Code:
TEST1 RT_RCDATA "C:\Users\Public\Documents\delphi\test\test.jpg"
TEST2 RT_RCDATA "C:\Users\Public\Documents\delphi\test\images.jpg"

Es muss TEST1 RCDATA heißen. RT_RCDATA ist die Konstante aus Delphi. Das kannst du auch sehen, wenn du dir die EXE mit einem Ressourceneditor betrachtest.

Bernhard

fiscch4 25. Nov 2010 17:06

AW: JPGs aus einer Resourcendatei laden
 
Vielen Vielen Dank
es funktioniert :-D

hätte gleich noch eine frage dürfte wahrscheinlich leicht zu beantworten sein habe bloß mit sowas noch nie gearbeitet
ich möchte gernen einen Prozess starten ohne Form oder ähnliches das es quasie nur im taskmanager unter prozesse zufinden ist und damit dann das Datum abgleiche alle 24 std
ist sowas mit delphi möglich?

falls nicht ist es egal

nochmals vielen Dank
fiscch4

DeddyH 25. Nov 2010 17:07

AW: JPGs aus einer Resourcendatei laden
 
Sicher ist das möglich. Was ich immer mache: Konsolenanwendung erstellen und das {$APPTYPE CONSOLE} rauslöschen.

Bummi 25. Nov 2010 17:15

AW: JPGs aus einer Resourcendatei laden
 
hat mich jetzt auch etwas Zeit gekostet ich verwende immer den XN ResourceEditor
Code:
TEST1 RCDATA "C:\Users\Public\Documents\delphi\test\test.jpg"
TEST2 RCDATA "C:\Users\Public\Documents\delphi\test\images.jpg"
EDIT:
zu spät....

fiscch4 25. Nov 2010 17:25

AW: JPGs aus einer Resourcendatei laden
 
Zitat:

Zitat von Bummi (Beitrag 1064053)
hat mich jetzt auch etwas Zeit gekostet ich verwende immer den XN ResourceEditor

Trotzdem Danke :)

ich gebs heute nicht auf :D

JPGs anstatt in TImage in Buttons zu laden bzw verschieden Onclicks für die verschiedenen TImages
ist auch das möglich oder muss ich dann die position des cursors abfragen?

Vielen Vielen Dank

DeddyH 25. Nov 2010 17:26

AW: JPGs aus einer Resourcendatei laden
 
Jedes Image hat sein eigenes OnClick-Event.

Bummi 25. Nov 2010 17:32

AW: JPGs aus einer Resourcendatei laden
 
Da es sich um einen Adventskalender handelt würde ich jedem Bild einen Tag verpassen für das Datum.
allen Bildern die gleiche OnClick-Routine zuweisen, in einer Ini-Datei ablegen was schon geöffnet wurde, im OnClick prüfen ob der Tag für den gewählte TAG schon geöffent werden kann , wenn ja das zugehörige Bild aus der Resource laden und in der Ini interlegen daß dieser Tag bereits geöffnet wurde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 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