Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   JPeg aus Ressource in TImage laden, kriegs aber nicht hin. (https://www.delphipraxis.net/8005-jpeg-aus-ressource-timage-laden-kriegs-aber-nicht-hin.html)

Armageddon 26. Aug 2003 20:15


JPeg aus Ressource in TImage laden, kriegs aber nicht hin.
 
Hi,

Ich hab bin langsam am verzweifeln. :wall:

Wie man die Ressourcendatei erstellt weiß ich und hab ich auch schon gemacht.

bild1 JPG "bild1.jpg"
bild2 JPG "bild2.jpg"

usw.

klappt auch prima. Hab ich hier im Forum gefunden als Beispiel.

Jetzt häng ich nur drann fest das ich nicht genau weiß und auch dazu nix gescheites im Web finde wie ich einem TImage z.b. das bild1 aus der Ressourcendatei zuweiße.

Habe es mit
Delphi-Quellcode:
Image1.Picture.Bitmap.Handle := LoadBitmap(HINSTANCE, 'bild1');
versucht. Kommt zwar kein Fehler aber es passiert überhaupt nix. Muß wohl irgendwie mit dem Bitmap zu tun haben.

Kann mir einer sagen wie ich das ganz einfach hinkriege?

Gruß Arma.

Luckie 26. Aug 2003 20:21

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
In deiner Ressource sind es wohl JPG's oder? Und jetzt kuck mal hier:
Code:
Image1.Picture.[b][color=#ff0012]Bitmap[/color][/b].Handle := LoadBitmap(HINSTANCE, 'bild1');
Sieht für mich nicht so aus, als ob das klappen könnte.

Übrigens gibt es die Methode LoadFromResource und den Typ TResourceStream, wenn ich mich nicht täusche.

Leuselator 26. Aug 2003 20:21

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
bin nicht sicher, ob das auch für JPG's gilt aber bei mir in
meinen Komponenten schnuckelt es so:
Delphi-Quellcode:
  FBild := TBitmap.Create;
    FBild.LoadFromResourceName(hInstance,'NameDesBildes');

Armageddon 26. Aug 2003 20:26

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
@ Luckie: Das habe ich ja gemeint das es wohl daran liegt. Ich wollt ja nur mal wissen wie man das genau macht. Irgendjemand muß das ja mal gemacht haben.

@Leuselator: Danke werde es mal testen.

Gruß Arma.

P.S. Vielleicht finde ich ja noch irgendwo mal ein gescheites Tutorial das nicht zu kompliziert ist für nen Anfänger.

Darty 26. Aug 2003 20:55

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
ich möchte ja nicht angeben .. aber habt ihr mal da reingeguckt :)

http://www.delphipraxis.net/internal...&highlight=dll

Armageddon 26. Aug 2003 21:13

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Danke Mr.Knebel,

aber ich bin blutiger Anfänger. :|

Mir fehlt bei Deinem Beispiel echt der Durchblick.
Dein Beispiel ist ja mit ner Dll aber ich will das im Programm drin.
Sicher nicht schwer umzubauen undzu portieren Dein Beispiel aber ich check es nicht.

Kannst das Beispiel nicht umbauen auf mein Problem / Frage ?

Wär nett.

Sag schon mal Danke

Arma

Christian S. 26. Aug 2003 21:20

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Hallo!

Auf diese Weise hat M.Knebel's Beispiel bei mir funktioniert:
Delphi-Quellcode:
procedure loadImage (myImage : TImage);
VAR s : TResourceStream;
    j : TJPEGImage;
begin
  s := TResourceStream.Create(hInstance,'bild','JPG');
  j := TJPEGImage.Create;
  j.LoadFromStream(s);
  myImage.Picture.Bitmap.Assign(j);
  j.Free;
end;
Dabei ist "bild" der Name der Resource, die ich einlesen möchte und JPG der Resourcentyp.

MfG
Peter

Armageddon 27. Aug 2003 23:11

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Hi, (mal kleinlaut nochmal was Frag!)

habe es jetzt etwas umgebaut aber stehe vor einem neuen Problem bei dem ich einfach nicht weiter komme. Wollte es mit ner Procedure machen die Abbricht wenn es das Bild nicht gibt. Aber so wie's grad ist geht es wohl nicht. Wie kann ich ne Procedure oder Function abbrechen?

Folgenden Code hab ich nun:

Delphi-Quellcode:
procedure LoadImage(Bild: String; Ziel: TImage);
var
  b: TJPEGImage;
  s: TResourceStream;
begin
  try
    s := TResourceStream.Create(HINSTANCE, Bild, 'JPG');
    b := TJPEGImage.Create;
    b.LoadFromStream(S);
    Ziel.Picture.Bitmap.Assign(b);
    b.Free;
  except
    (*Hier sollt dann ne Fehlermeldung kommen*)
  end;
end;
So und aufrufen tu ich's so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 LoadImage('bild1', Image1);
end;
Please help, (auch wenn ich .... die jenigen werden das schon wissen)


Gruß Arma.

Darty 27. Aug 2003 23:58

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Willst die Bilder aus einer DLL laden ? Wenn ja wo machste dass ?

ps: haste mein Link genau gelesen ?

Armageddon 28. Aug 2003 16:18

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Hi M.Knebel,

nee ich hab das Bild als Resource in der Programmdatei. Das funktioniert soweit auch ganz gut. Ich wollte jetzt halt nur noch wissen ob es möglich ist wenn ich aus der Prozedure z.B. jetzt ne Funktion mache das wenn es das Bild das man als Name an die Funktion oder in dem Fall wie es noch ist an die Procedure übergibt. Das dann ein Fehler ausfgegeben wird. Aber irgendwie krieg ich das nicht so recht hin. Wie ich es will weiß ich aber nicht wie ich es Umsetzen könnte.

Gruß Arma.

The-X 31. Aug 2003 00:38

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Kleiner Tipp: Unit Jpeg ;)

hoffe, das ich 'n bisschen helfen konnte...

Armageddon 31. Aug 2003 11:50

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Hi The-X

Ähm danke für den Tip. Hab das natürlich schon gemacht *g*
Der Rest funktioniert auch. Häng nur noch dran fest das ich irgendwie überprüfen sollte ob das bild auch in der Exe vorhanden ist. Weiß nur nicht genau wie :gruebel:

Darty und ich haben uns darüber mal im ICQ unterhalten.
Dachten das ungefähr so:

Delphi-Quellcode:
procedure LoadImage(Bild: String; Ziel: TImage);
var
  b: TJPEGImage;
  s: TResourceStream;
begin
  if exists Bild in der exe then
    s := TResourceStream.Create(HINSTANCE, Bild, 'JPG');
    b := TJPEGImage.Create;
    b.LoadFromStream(S);
    Ziel.Picture.Bitmap.Assign(b);
    b.Free;
    s.Free
  else
    s := TResourceStream.Create(HINSTANCE, 'Fehlerbild', 'JPG');
    b := TJPEGImage.Create;
    b.LoadFromStream(S);
    Ziel.Picture.Bitmap.Assign(b);
    b.Free;
    s.Free;
  end;
end;
wobei ich noch nicht weiß wie oder ob man das überhaupt prüfen kann ob das bild existiert! Ist natürlich total Quatsch die "if exists bild in der exe" Zeile.

Hoffe es ist verständlich formuliert.

Gruß Arma.

Armageddon 31. Aug 2003 15:02

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Ich habs :bounce2:

Hier die Lösung:

Delphi-Quellcode:
procedure LoadImage(Bild: String; Ziel: TImage);
var
  b: TJPEGImage;
  s: TResourceStream;
  r: Cardinal;
begin
  r := FindResource(HInstance, PChar(Bild), 'JPG');
  if r <> 0 then
  begin
    s := TResourceStream.Create(HInstance, Bild, 'JPG');
    b := TJPEGImage.Create;
    b.LoadFromStream(s);
    Ziel.Picture.Bitmap.Assign(b);
    b.Free;
    s.Free;
  end
  else
  begin
    s := TResourceStream.Create(HInstance, 'Fehlerbild', 'JPG');
    b := TJPEGImage.Create;
    b.LoadFromStream(s);
    Ziel.Picture.Bitmap.Assign(b);
    b.Free;
    s.Free;
  end;
end;
Und aufrufen wie gehabt so:

Delphi-Quellcode:
LoadImage('bild1', Image1);
Vielleicht mach ich mal noch ein schönes Beispiel das man dann vielleicht in die Code-Library setzen kann. So mit allem drum und drann wie ich das Resource-File mache usw.

Gruß Arma. :coder:

Christian S. 31. Aug 2003 15:43

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Hi!

Vielleicht wäre es schöner, alles, was in beiden Zweigen der IF-Anweisung vorkommt, nach draußen zu packen. Spart ein paar Zeilen.

Das mit dem Eintrag im Code-Library ist eine gute Idee. Zur Erstellung von Resourcen braucht dort aber, glaube ich, nicht noch etwas. Das hier reicht, denke ich.,

MfG
Peter

Armageddon 31. Aug 2003 16:41

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Hi Peter,

ähm das doch nur eine if-Abfrage.

Außerdem kommt die procedure ja nur einmal im Programm vor. Da ich sie ja immer wieder nur mir dem LoadImage.... Aufrufe.

Sicher geht das auch extern in ne dll. Aber ich wollte halt nur eine Datei haben zum weitergeben.

Aber ansonsten kann es sich glaub sehen lassen denk ich für nen Anfänger wie mich :D

Gruß Arma.

Christian S. 31. Aug 2003 16:48

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Hi!

Wahrscheinlich habe ich mich unklar ausgedrückt:

Delphi-Quellcode:
procedure LoadImage(Bild: String; Ziel: TImage);
var
  b: TJPEGImage;
  s: TResourceStream;
  r: Cardinal;
begin
  r := FindResource(HInstance, PChar(Bild), 'JPG');

  if r <> 0 then
    s := TResourceStream.Create(HInstance, Bild, 'JPG');
  else
    s := TResourceStream.Create(HInstance, 'Fehlerbild', 'JPG');

  b := TJPEGImage.Create;
  b.LoadFromStream(s);
  Ziel.Picture.Bitmap.Assign(b);
  b.Free;
  s.Free;
end;
So meinte ich das.

Zitat:

Aber ansonsten kann es sich glaub sehen lassen denk ich für nen Anfänger wie mich
Ich wollte Deine Leistung in keiner Weise schmälern und finde auch, dass diese Prozedur sehr nützlich ist. Wie gesagt, ich finde, sie sollte ins Code-Library.

MfG
Peter

Armageddon 31. Aug 2003 16:59

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Hi Peter,

perfekt aber nen kleinen Hacken hat es noch bei Dir :mrgreen:

das ";" vor dem else müßte weg sonst meckert er beim compilieren.

So wenn ich mal Morgen Zeit habe mach ich da einen schön geschriebenen Thread für die Code-Library.


Gruß Arma.

Christian S. 31. Aug 2003 17:07

Re: JPeg aus Ressource in TImage laden, kriegs aber nicht hi
 
Zitat:

das ";" vor dem else müßte weg sonst meckert er beim compilieren.
Wie konnte mir das passieren? :roteyes: Diese Schande! :duck:


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