Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi PNGs oder Dateien allgemein in EXE einbinden und auslesen (https://www.delphipraxis.net/164427-pngs-oder-dateien-allgemein-exe-einbinden-und-auslesen.html)

entwickler 17. Nov 2011 19:33

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:
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;
War jetzt auch keine große Herausforderung :wink:

DeddyH 18. Nov 2011 07:25

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.

entwickler 18. Nov 2011 08:44

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)?

DeddyH 18. Nov 2011 08:48

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.

entwickler 18. Nov 2011 08:53

AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen
 
Google hat mir folgendes Vorgeschlagen:

Delphi-Quellcode:
ResourceStream.Savetofile('');
geht das so ohne weiteres?

DeddyH 18. Nov 2011 09:06

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]

entwickler 22. Nov 2011 08:40

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:
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;
Danke nochmal an euch alle:thumb:
Ihr habt mir echt weitergeholfen!

entwickler 23. Dez 2011 12:47

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.
Seite 5 von 5   « Erste     345   

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