Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   JPG ohne Resource einfügen (https://www.delphipraxis.net/190377-jpg-ohne-resource-einfuegen.html)

Danny92 29. Sep 2016 00:57

JPG ohne Resource einfügen
 
Hey Leute,
ist es möglich, eine jpg-Datei ohne Resource einzufügen?
Ich will ein Bild als Image einfügen, aber sobald ich die Resource lösche oder verschiebe, hab ich ein Problem.
Ich will nur die ausführbare exe haben, ohne Datei drumherum...
Geht das?

haentschman 29. Sep 2016 05:20

AW: JPG ohne Resource einfügen
 
Moin...:P

Das ist der Zweck einer Ressource das man Bilder oder Text "eincomplieren" kann. :gruebel:

Wie stellst du das an an es nicht funktioniert? :P Oder ich habe dich nicht verstanden... :gruebel:

jaenicke 29. Sep 2016 05:25

AW: JPG ohne Resource einfügen
 
Wann hast du beim Entfernen der Ressourcendatei (.res) ein Problem? Beim Kompilieren oder beim Ausführen der Anwendung?

Beim Kompilieren wäre normal, denn da wird ja die Exe erst erstellt.

Wenn beim Ausführen, hast du etwas beim Laden der Ressource falsch gemacht. Dazu lässt sich ohne Quelltext aber nichts sagen.

ringli 29. Sep 2016 05:27

AW: JPG ohne Resource einfügen
 
Ich denke mal Danny92 meint mit Ressource die JPG-Datei und lädt diese direkt anstatt das Bild erstmal in eine Ressourcedatei (*.rc bzw. *.res) einzubinden. Das würde erklären das das Programm die Datei nicht mehr finden kann sobald sie verschoben oder gelöscht wird.

Danny92 29. Sep 2016 07:09

AW: JPG ohne Resource einfügen
 
Das Problem entsteht beim Ausführen der exe.

Das Kompilieren geht alles einwandfrei, und solange die Resource im angegebenen Pfad existiert, auch beim Ausführen. Lösche ich die Resource jedoch, lässt sich die exe ohne Fehlermeldung nicht mehr ausführen: "Die angeforderte Datei wurde nicht gefunden. Stellen Sie sicher, dass Pfad- und Dateiname richtig sind."

haentschman 29. Sep 2016 07:20

AW: JPG ohne Resource einfügen
 
Moin...:P
Zitat:

Ressourcedatei (*.rc bzw. *.res)
...hast du das Bild in die Ressourcendatei aufgenommen? Wie holst du das Bild aus der Ressource? (Quelltext)

Frage: Was bezeichnest du als Ressource? Das Bild im Dateisystem?

trojaner 29. Sep 2016 07:24

AW: JPG ohne Resource einfügen
 
Morgen

hohl dir den http://www.resource-builder.com/

Gruss

Danny92 29. Sep 2016 07:27

AW: JPG ohne Resource einfügen
 
Code:
procedure TForm1.SpieleMusikAb(FileName: string);
var
  rStream: TResourceStream;
  fStream: TMemoryStream;
  fname: string;
begin
  fname := ExtractFileDir(Paramstr(0))+'\sound\'+FileName+'.mp3';
  rStream := TResourceStream.Create(hInstance, FileName, RT_RCDATA) ;
  try
    fStream := TMemoryStream.Create;
    try
      fStream.CopyFrom(rStream, 0) ;
    finally fStream.Free; end;
  finally rStream.Free; end;
  MediaPlayer1.Close;
  MediaPlayer1.FileName:=fname;
  MediaPlayer1.Open;
  MediaPlayer1.Play;
end;
Code:
implementation

{$R *.dfm} {$R AboutDelphi.res}
Hier nehme ich beispielsweise statt eines Bildes eine mp3-Datei in einer Resource.

Kompilieren und ausführen funktioniert wie gesagt tadellos, solange die res-Datei davor nicht gelöscht wird.
Ich möchte die exe lediglich ohne res Datei ausführen können. Sonst ging das eigentlich auch immer

jaenicke 29. Sep 2016 07:40

AW: JPG ohne Resource einfügen
 
Also fassen wir mal zusammen was du machst:
  • Du baust dir einen Dateinamen in fname zusammen
  • Du lädst eine Ressource in rStream, kopierst diese in den MemoryStream fStream und gibst beides wieder frei
  • Und nun versuchst du aus der Datei, deren Dateiname in fname steht, zu lesen
Aber du benutzt den Inhalt der Ressource ja nirgends. Du lädst ja nach wie vor einfach aus der .mp3 Datei.

Lösungen:
  • Du kopierst den Inhalt der Ressource in einen TFileStream und legst die Datei lokal ab. Dann solltest du das allerdings nicht im Anwendungsverzeichnis machen, da du dort normalerweise keine Schreibrechte hast.
  • Oder du benutzt eine richtige Mediaplayer-Bibliothek wie bass, die auch aus Streams abspielen kann. Dann brauchst du auch die lokale Datei nicht mehr.

p80286 29. Sep 2016 08:22

AW: JPG ohne Resource einfügen
 
Deinen Code kann man auch gleich so reduzieren:

Delphi-Quellcode:
procedure TForm1.SpieleMusikAb(FileName: string);
var
  fname: string;
begin
  fname := ExtractFileDir(Paramstr(0))+'\sound\'+FileName+'.mp3';
  // ggf if Fileexists(fname) then begin
  MediaPlayer1.Close;
  MediaPlayer1.FileName:=fname;
  MediaPlayer1.Open;
  MediaPlayer1.Play;
end;
Da ist nichts mit Resource !

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz