![]() |
AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen
@ DeddyH
Klar, immer her damit! :lol: @ wicht Klingt logisch, habs in ne Prozedur gepackt:
Delphi-Quellcode:
War jetzt auch keine große Herausforderung :wink:
type
TForm1 = class(TForm) Button1: TButton; Memo: TMemo; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var i : word; begin for i := 1 to 493 do Memo.Lines.Add(inttostr(i) + ' RCDATA "' + inttostr(i)+ '.png"'); Memo.Lines.SaveToFile('C:\Pokemon\Pokedex.rc'); // oder wohin auch immer end; |
AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen
Komisch, mein Code zur Erstellung der Ressource sah beinah genauso aus :lol:. Das Projekt kann ich aber erst heute Abend hochladen, da ich es wie gesagt nur zu Hause habe.
|
AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen
Nicht schlimm, hauptsache es kommt :)
Übrigens, wie kann ich die Ressource den als Datei aus der exe heraus speichern (z. B. Pokedex.png als PNG- Datei speichern, oder auch eine exe oder dll)? |
AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen
Mit Streams sollte das recht einfach zu machen sein. Mit TResourceStream Ressource holen, in einen TFileStream oder TMemoryStream kopieren und als Datei abspeichern.
|
AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen
Google hat mir folgendes Vorgeschlagen:
Delphi-Quellcode:
geht das so ohne weiteres?
ResourceStream.Savetofile('');
|
AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Scheint so, ich hatte übersehen, dass TResourceStream diese Methode ja bereits erbt. Damit entfällt dann auch der 2. Stream sowie das Kopieren.
[edit] So, hier ist das kleine Demo-Progrämmchen samt Ressourcen und der DLL. [/edit] |
AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen
Danke, DeddyH, die DLL funktioniert einwandfrei.
Und speichern kann ich die Dateien auch ganz leicht mit dem Einzeiler:
Delphi-Quellcode:
Danke nochmal an euch alle:thumb:
procedure TForm1.FormCreate(Sender: TObject);
begin FDLLHandle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'imagedll.dll')); Randomize; end; procedure TForm1.FormDestroy(Sender: TObject); begin if FDLLHandle <> 0 then FreeLibrary(FDLLHandle); end; procedure TForm1.LoadPokemon(Index: Cardinal; aPicture: TPicture); var ResStream: TResourceStream; png: TPngObject; begin Assert((FDLLHandle <> 0) and Assigned(aPicture)); if (Index < 1) or (Index > MAXPICINDEX) then raise Exception.CreateFmt('Index muss zwischen 1 und %d liegen.', [MAXPICINDEX]); ResStream := TResourceStream.CreateFromID(FDLLHandle, Index, RT_RCDATA); try ResStream.Position := 0; png := TPngObject.Create; try // Einzeiler: ResStream.Savetofile('D:\Projekt_Pokémon\Bild.png'); // oder wo auch immer png.LoadFromStream(ResStream); aPicture.Assign(png); finally png.Free; end; finally ResStream.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin LoadPokemon(Random(MAXPICINDEX) + 1, Image1.Picture); end; Ihr habt mir echt weitergeholfen! |
AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
So, jetzt habe ich neue Grafiken vom Kollegen gekriegt, die haben dieselbe Auflösung, sind nur besser komprimiert und auch an den richtigen Stellen transparent. Inhaltlich können die EXE und die dll dasselbe wie in dem Beispielprogramm von DeddyH. Die dll hat jetzt nur noch ca. 1/4 der Ursprungsgröße; ebenso wie die Pokedex.res:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 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