![]() |
Bilder in exe integrieren
Hallo!
Habe schon ein bisschen gegoogelt, aber irgendwie nicht so ganz das gefunden, was ich brauche. Ich habe einen kleinen Mapeditor geschrieben. Die Map ist wie eine Tabelle aufgebaut. Jedes Tabellenelement wird durch einen SpeedButton repräsentiert. Am Rand des Programms kann man (auch mit Hilfe von 4 Speedbuttons) ein Element (Haus, Baum, Wiese oder Leer) auswählen. Hat man eins ausgewählt und klickt in der Map (der Tabelle) ein Element (einen Button) an, so bekommt der angeklickte Button dasselbe Element (Bild) zugewiesen (über die Eigenschaft buttonname.glyph), das man vorher ausgewählt hat. Geladen wird das Bild mit TBitmap.LoadFromFile() aus einer Bitmapdatei. Die Bilder der Auswahlbuttons sind festgelegt, werden also nicht dynamisch geladen. Nun möchte ich das Programm aber nach Möglichkeit in eine einzige Datei bekommen (also nicht die einzelnen Bilddateien mitliefern). Meine Frage ist daher, wie ich die Bilddateien, die ich bis jetzt immer dynamisch lade, in die fertige .exe mit einpacke und wie ich sie im Programmcode aufrufen muss, damit das funktioniert. Sollte ich sie nicht in die .exe integrieren können wäre meine Frage, wie ich es hinbekomme, dass die Dateien auch nach dem ausgliedern des Programmes aus der Entwicklungsumgebung geladen werden können. Wenn ich das Programm aus Delphi heraus starte ("Play" drücke) dann findet er die Bilddateien nämlich. Starte ich es aber direkt, so findet er die Dateien nicht mehr, obwohl sie relativ zur Programmdatei immer noch an derselben Stelle liegen (nämlich im selben Ordner). Wohl aber werden die Bilder der festgesetzten Auswahlbuttons angezeigt. Ich würde allerdings Methode 1 (in die .exe integrieren) bevorzugen! Ich hoffe das war soweit verständlich :roll: ! Würd mich über Hilfe freuen! Mathis |
Re: Bilder in exe integrieren
Suche im Forum mal nach
![]() |
Re: Bilder in exe integrieren
OK, danke erst mal für den Tip mit den Resourcen. Hab mir das jetz mal angeschaut und ein bisschen gebastelt. Benutze Delphi 2005. Der erstellt, wenn man die .rc-Datei dem Projekt hinzufügt beim Compilieren automatisch die Resource und bindet sie ein. Das funktioniert auch soweit. Mit die XN Resource Editor kann kann ich sehen, dass die Bilder in der exe gelandet sind. Nur das Aufrufen funktioniert irgendwie noch nicht. Habe jetzt mal folgendes Testprogramm erstellt:
Zunächst die .rc-Datei:
Delphi-Quellcode:
Und so versuche ich das jetzt aufzurufen:
BILD1 BMP "bild1.bmp"
BILD2 BMP "bild2.bmp"
Delphi-Quellcode:
Jetzt sagt er mir aber immer, dass er die resource nicht finden kann. Mit welchem Namen muss ich die denn aufrufen??
procedure TForm1.SpeedButton1Click(Sender: TObject);
var bild:TBitMap; begin bild := TBitMap.Create; bild.LoadFromResourceName(HInstance,'BILD1'); SpeedButton1.Glyph := bild; end; |
Re: Bilder in exe integrieren
Für das erste Problem kA ... bin ich grad zu müde :cat:
Aber hier: Zitat:
Delphi-Quellcode:
Weil sonst riskierst du Memory Leaks in deiner Anwendung, weil du "bild" wieder freigeben solltest, wenn du es nicht mehr brauchst. Und wenn du in deiner Variante oben bild freigegeben hättest, wäre auch das Bild vom Button verschwunden.
procedure TForm1.SpeedButton1Click(Sender: TObject);
var bild:TBitMap; begin bild := TBitMap.Create; try bild.LoadFromResourceName(HInstance,'BILD1'); SpeedButton1.Glyph.Assign (bild); // oder SpeedButton1.Glyph.Picture.Assign (bild); ... kA genau finally FreeAndNil (bild); end; end; |
Re: Bilder in exe integrieren
hast du die .rs-datei auch compiliert und mit {$R ResName.res} in dein Programm eingebunden.
|
Re: Bilder in exe integrieren
es liegt an der rc-Datei. Du hast darin festgelegt das die Bilder vom Typ BMP sind. Ein TBitmap sucht aber beim laden nicht nach dem Typ BMP.
Den richtigen Typ weiß ich jetzt nicht auswendig. Ich glaube es war BITMAP oder RT_BITMAP. Du kannst ja beide Varianten mal probieren. Vielleicht findet sich auch noch jemand der es genau weiß oder im Forum ist es irgendwo zu finden. |
Re: Bilder in exe integrieren
In meiner Anfangszeit in Delphi hab ich so ein Problem einfach dadurch gelöst, dass ich in meinem Project ein weiteres Form erzeugt habe, dass nie sichtbar wurde und mir als Container für Bilder diente. Dort einfach TImages draufpacken und die Bilder da rein packen. Und dann einfach
Delphi-Quellcode:
Frisst zwar etwas Resourcen, aber darüber muss man sich ja heut keine Gedanken mehr machen ;)
SpeedButton1.Glyph.Assign(Form2.Image1.Picture.Bitmap);
|
Re: Bilder in exe integrieren
genau, die Variante frisst ressourcen und der Start des Programmes dauert länger weil die Bilder (dfm-dateien) beim erstellen der Form geladen wird.
|
Re: Bilder in exe integrieren
Stimmt, aber es war die schnellste Methode, zusätzliche Bilder in der Exe vorzuhalten ;)
|
Re: Bilder in exe integrieren
Zitat:
wenn anstatt BMP BITMAP in der rc-Datei steht, müsste es funktionieren. ![]() |
Re: Bilder in exe integrieren
Delphi-Quellcode:
mein_res.rc Datei:
procedure LoadBMPFromResource(BM: TBitmap; ID: Integer);
var ResourceStream: TResourceStream; begin ResourceStream:= TResourceStream.CreateFromID(HInstance, ID, RT_RCDATA); try BM.LoadFromStream(ResourceStream); finally ResourceStream.Free; end; end; Zitat:
Zitat:
Projekt jetzt erzeugen und ausführen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 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 by Thomas Breitkreuz