Autor Beitrag
tartare
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP SP2, WIN Vista Home Professional
Delphi 7/2009, C#, C++(VS 2005 Express)
BeitragVerfasst: Do 27.04.06 21:50 
Hallo,

ich will gern ein Bitmap in eine Exe einbinden, hab auch schon eine fertige .res datei mit der brcc32.exe gemacht. Der Name und alles wie ich es wollte stimmt:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
{$R Bild.RES}

procedure TForm1.FormCreate(Sender: TObject);
begin
image1.Picture.Bitmap.Handle:=LoadBitMap(HInstance,'Bild');//aber es tut sich gar nichts, auch keine Fehlermeldung
end;


Hab das ganze mal mir "Resource Hacker" angeguckt und eine Zahl=1031 gefunden und gedacht, dass man das vielleicht mit loadfromresourceID machen könnte aber da gab es eine Fehlermeldung genau wie bei loadfromresourcename.

woran könnte das liegen, hab ich vielleicht noch was vergessen?
danke im vorraus... ich hoffe das ist genug Quelltext, wenn nich noch mal nachfragen.
mfg tartare

_________________
Ich leb in meiner eigenen Welt, aber das is ok, da kennt man mich.
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: Do 27.04.06 22:25 
Zitat:

ausblenden Delphi-Quelltext
1:
image1.Picture.Bitmap.Handle:=LoadBitMap(HInstance,'Bild');					


Richtig wäre IMHO
ausblenden Delphi-Quelltext
1:
Image1.Picture.Bitmap.LoadFromResourceName(hInstance,'Bild');					


Für eine mit Sicherheit funktionierende Benutzung von in einer Resource eingebundenen Bitmaps siehe auch dieses Topic (in der Unit UGame).

Mfg


Zuletzt bearbeitet von fidionael am Do 27.04.06 22:49, insgesamt 2-mal bearbeitet
DelphiAnfänger
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 112

Win XP, Firefox 2.0, IE6
Delphi 5 Prof., Delphi 2005 PE
BeitragVerfasst: Do 27.04.06 22:31 
ich würde an deiner stelle keine Bitmaps nehmen sondern JPG Dateien die sind kleiner.
hier kommt ne anleitung für JPG Dateien:
  1. du erstellst eine RC datei die folgendermaßen aussieht:
    ausblenden Quelltext
    1:
    2:
    3:
    BILD1 RCDATA "Bild1.jpg"
    BILD2 RCDATA "Bild2.jpg"
    ...

  2. kopier die Datei "brcc32.exe" aus deinem Delphi/Bin verzeichnis in das verzeichnis in dem deine rc datei und die bilder sind
  3. führe im cmd folgenden Befehl aus (in dem Verzeichnis in dem die bilder und die rc datei liegt): BRCC32 BILDER.RC
  4. jetzt müsstest du eine BILDER.res Datei haben
  5. jetzt schreibst du in deinem Projekt(Unit1)
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    var
      Form1: TForm1;

    implementation

    {$R *.DFM}
    {$R BILDER.RES}

  6. die Bilder kannst du folgendermaßen aufrufen:
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    9:
    10:
    11:
    12:
    procedure TForm1.Bild1laden;
    var Bild: TJPEGImage;
      resstream: TResourceStream;
    begin
      Bild := TJPEGImage.Create;
      resstream := tresourceStream.Create(hInstance, 'BILD1', RT_RCDATA);
      Bild.LoadFromStream(resstream);
      Bildbezeichner.Picture.Assign(bild);
      //statt Bildbezeichner schreibst du den namen den du der TImage komponente gegeben hast (Objektinspektor)
      bild.free;
      resstream.free;
    end;

  7. in deinem Projekt wenn das Bild angezeigt werden soll einfach die procedur Bild1laden aufrufen


hier nochmal ein Beispiel für eine unit die beim klicken auf Button1 Bild1 anzeigt und beim klick auf Button2 Bild2 :
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Bild1: TImage;
    Bild2: TImage;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Bild1laden;
    procedure Bild2laden;
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
{$R BILDER.RES}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Bild2.Picture:=nil; //Bild zwei löschen
 Bild1laden;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Bild1.picture:=nil; //Bild eins löschen
 Bild2laden;
end;

procedure TForm1.Bild1laden;
var Bild: TJPEGImage;
  resstream: TResourceStream;
begin
  Bild := TJPEGImage.Create;
  resstream := tresourceStream.Create(hInstance, 'BILD1', RT_RCDATA);
  Bild.LoadFromStream(resstream);
  Bild1.Picture.Assign(bild);
  bild.free;
  resstream.free;
end;

procedure TForm1.Bild2laden;
var Bild: TJPEGImage;
  resstream: TResourceStream;
begin
  Bild := TJPEGImage.Create;
  resstream := tresourceStream.Create(hInstance, 'BILD2', RT_RCDATA);
  Bild.LoadFromStream(resstream);
  Bild2.Picture.Assign(bild);
  bild.free;
  resstream.free;
end;


end.


die Bilderdateien musst du dann nicht extra mitschicken die sind dann in der *.exe datei drin hoffe ich konnte dir helfen

//EDIT da war einer schneller aber ich würde das trozdem mit JPG's machen da die teilweise erheblich kleiner sind
//Edit2: hab grad noch ein paar Fehler gefunden (in der Beilspielunit :oops: )
tartare Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP SP2, WIN Vista Home Professional
Delphi 7/2009, C#, C++(VS 2005 Express)
BeitragVerfasst: Fr 28.04.06 16:34 
Hallo,
Danke für die beiden Antworten, hab mir daraus was zusammen- gebastelt und funktioniert:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var rstream:TResourceStream;

procedure TForm1.FormCreate(Sender: TObject);
begin
rstream:=TResourceStream.Create(HInstance,'Bild',RT_RCDATA);
image1.Picture.Bitmap.LoadFromStream(rstream);
rstream.Free;
end;


Danke nochmal.

_________________
Ich leb in meiner eigenen Welt, aber das is ok, da kennt man mich.