Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bilder in exe integrieren (https://www.delphipraxis.net/104582-bilder-exe-integrieren.html)

mathis.h 6. Dez 2007 21:02


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

argonix 6. Dez 2007 21:05

Re: Bilder in exe integrieren
 
Suche im Forum mal nach Hier im Forum suchenRessourcen erstellen. Wenn du eine Ressource erstellt hast, kannst du sie in die EXE einbinden und die Bilder dann daraus laden.

mathis.h 6. Dez 2007 22:08

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:
BILD1 BMP "bild1.bmp"
BILD2 BMP "bild2.bmp"
Und so versuche ich das jetzt aufzurufen:
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  bild:TBitMap;
begin
  bild := TBitMap.Create;
  bild.LoadFromResourceName(HInstance,'BILD1');
  SpeedButton1.Glyph := bild;
end;
Jetzt sagt er mir aber immer, dass er die resource nicht finden kann. Mit welchem Namen muss ich die denn aufrufen??

Nuclear-Ping 7. Dez 2007 00:51

Re: Bilder in exe integrieren
 
Für das erste Problem kA ... bin ich grad zu müde :cat:

Aber hier:
Zitat:

Zitat von mathis.h
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  bild:TBitMap;
begin
  bild := TBitMap.Create;
  bild.LoadFromResourceName(HInstance,'BILD1');
  SpeedButton1.Glyph := bild;
end;

Mach das lieber so:
Delphi-Quellcode:
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;
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.

Cyberbob 7. Dez 2007 01:11

Re: Bilder in exe integrieren
 
hast du die .rs-datei auch compiliert und mit {$R ResName.res} in dein Programm eingebunden.

SirThornberry 7. Dez 2007 06:37

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.

Progman 7. Dez 2007 07:39

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:
SpeedButton1.Glyph.Assign(Form2.Image1.Picture.Bitmap);
Frisst zwar etwas Resourcen, aber darüber muss man sich ja heut keine Gedanken mehr machen ;)

SirThornberry 7. Dez 2007 07:51

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.

Progman 7. Dez 2007 07:53

Re: Bilder in exe integrieren
 
Stimmt, aber es war die schnellste Methode, zusätzliche Bilder in der Exe vorzuhalten ;)

bitsetter 7. Dez 2007 09:07

Re: Bilder in exe integrieren
 
Zitat:

Zitat von SirThornberry
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.

Hallo,

wenn anstatt BMP BITMAP in der rc-Datei steht, müsste es funktionieren.
TResourceStream - BITMAP - Verständnisfrage


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 Uhr.
Seite 1 von 2  1 2      

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