| Autor |
Beitrag |
tartare
      
Beiträge: 89
Win XP SP2, WIN Vista Home Professional
Delphi 7/2009, C#, C++(VS 2005 Express)
|
Verfasst: 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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| {$R Bild.RES}
procedure TForm1.FormCreate(Sender: TObject); begin image1.Picture.Bitmap.Handle:=LoadBitMap(HInstance,'Bild');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
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: Do 27.04.06 22:25
| Zitat: |
Delphi-Quelltext 1:
| image1.Picture.Bitmap.Handle:=LoadBitMap(HInstance,'Bild'); |
|
Richtig wäre IMHO
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
      
Beiträge: 112
Win XP, Firefox 2.0, IE6
Delphi 5 Prof., Delphi 2005 PE
|
Verfasst: 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:
- du erstellst eine RC datei die folgendermaßen aussieht:
Quelltext 1: 2: 3:
| BILD1 RCDATA "Bild1.jpg" BILD2 RCDATA "Bild2.jpg" ... |
- kopier die Datei "brcc32.exe" aus deinem Delphi/Bin verzeichnis in das verzeichnis in dem deine rc datei und die bilder sind
- führe im cmd folgenden Befehl aus (in dem Verzeichnis in dem die bilder und die rc datei liegt): BRCC32 BILDER.RC
- jetzt müsstest du eine BILDER.res Datei haben
- jetzt schreibst du in deinem Projekt(Unit1)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var Form1: TForm1;
implementation
{$R *.DFM} {$R BILDER.RES} |
- die Bilder kannst du folgendermaßen aufrufen:
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); bild.free; resstream.free; end; |
- 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 :
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 public end;
var Form1: TForm1;
implementation
{$R *.DFM} {$R BILDER.RES}
procedure TForm1.Button1Click(Sender: TObject); begin Bild2.Picture:=nil; Bild1laden; end;
procedure TForm1.Button2Click(Sender: TObject); begin Bild1.picture:=nil; 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  )
|
|
tartare 
      
Beiträge: 89
Win XP SP2, WIN Vista Home Professional
Delphi 7/2009, C#, C++(VS 2005 Express)
|
Verfasst: Fr 28.04.06 16:34
Hallo,
Danke für die beiden Antworten, hab mir daraus was zusammen- gebastelt und funktioniert:
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.
|
|
|