AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JPG ohne Resource einfügen

Ein Thema von Danny92 · begonnen am 29. Sep 2016 · letzter Beitrag vom 6. Okt 2016
Antwort Antwort
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

AW: JPG ohne Resource einfügen

  Alt 29. Sep 2016, 07:27
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
10.075 Beiträge
 
Delphi 12 Athens
 
#2

AW: JPG ohne Resource einfügen

  Alt 29. Sep 2016, 07:40
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: JPG ohne Resource einfügen

  Alt 29. Sep 2016, 08:22
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: JPG ohne Resource einfügen

  Alt 29. Sep 2016, 08:30
ok ich hab die resource einfach nochmal neu erstellt mit brcc32.exe. Jetzt gehts jedenfalls..
Keine Ahnung. Dankeschön^^
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.473 Beiträge
 
Delphi 12 Athens
 
#5

AW: JPG ohne Resource einfügen

  Alt 29. Sep 2016, 08:32
...er möchte die nicht auf der Platte liegen haben. Nur ging der Versuch mit der Ressource schief. jaenicke hat es schon erklärt...

Ich trau dem Frieden noch nicht. Zeig noch mal den letzten Stand des Codes...

Geändert von haentschman (29. Sep 2016 um 08:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: JPG ohne Resource einfügen

  Alt 3. Okt 2016, 21:02
Da das mit den Resourcen jetzt funktioniert,

will ich die jpg-Dateien als globale Variablen speichern, um sie später zu verwenden.
Wie geht das am einfachsten?
var
bild: TJpegImage;
RStream: TResourceStream;
begin
RStream := TResourceStream.Create(HInstance, 'A'+IntToStr(i), RT_RCDATA);
bild:=TJpegImage.Create;
bild.LoadFromStream(RStream);
RStream.Free;
end
Wenn ich das mit TJpegImage und LoadFromSteam mache, bekomme ich an irgendeiner Stelle immer Fehlermeldungen.
*Brett vorm Kopf*
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
10.075 Beiträge
 
Delphi 12 Athens
 
#7

AW: JPG ohne Resource einfügen

  Alt 4. Okt 2016, 00:03
An welcher Stelle und welche Fehlermeldungen?
Im Zweifelsfall (wenn du damit nichts anfangen kannst) halte an, wenn der Fehler aufgetreten ist und mache einen Screenshot wie es dann in Delphi aussieht. Vor allem den Stacktrace, die markierte Stelle, die Fehlermeldung...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: JPG ohne Resource einfügen

  Alt 4. Okt 2016, 01:05
Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg, StdCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Image2: TImage;
    Image3: TImage;
    procedure FormActivate(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure Image2Click(Sender: TObject);
    procedure Image3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure wahl(tuernummer: integer);
    function tuerwahl(autoposition, wahl1: byte): byte;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  gewaehlt: integer = 0;
  tuer: array[1..3] of TJpegImage;
  autoposition: byte;

implementation

{$R *.dfm} {$R es.res}

function TForm1.tuerwahl(autoposition, wahl1: byte): byte;
begin
  if autoposition=wahl1 then
  case autoposition of
  1: result:=Random(2)+2;
  3: result:=Random(2)+1;
  else
    if Random(2)=0
    then result:=1
    else result:=3
  end
  else
  case autoposition of
  1: if wahl1=2 then result:=3 else result:=2;
  3: if wahl1=2 then result:=1 else result:=2;
  else
    if wahl1=1
    then result:=3
    else result:=1
  end
end;

procedure TForm1.wahl(tuernummer: integer);
begin
  if gewaehlt=0 then
  begin
    case tuernummer of
      1: if tuerwahl(autoposition, tuernummer)=2
         then Image2.Picture.Graphic:=tuer[3]
         else Image3.Picture.Graphic:=tuer[3];
      2: if tuerwahl(autoposition, tuernummer)=1
         then Image1.Picture.Graphic:=tuer[3]
         else Image3.Picture.Graphic:=tuer[3];
    else
      if tuerwahl(autoposition, tuernummer)=2
      then Image2.Picture.Graphic:=tuer[3]
      else Image1.Picture.Graphic:=tuer[3];
    end;
    gewaehlt:=tuernummer;
  end else
  begin



  end
end;

procedure TForm1.FormActivate(Sender: TObject);
var
   jpgLogo: TJpegImage;
   RStream: TResourceStream;
   i, j: integer;
begin
   for i:=1 to 3 do
   begin
     RStream := TResourceStream.Create(HInstance, 'A'+IntToStr(i), RT_RCDATA);
     try
        jpgLogo := TJpegImage.Create;
        Try
           jpgLogo.LoadFromStream(RStream);
           tuer[i].LoadFromStream(RStream);
           //tuer[i]:=jpgLogo;
           if i=1 then
           for j:=1 to 3 do
           case j of
            1: Image1.Picture.Graphic := jpgLogo;
            2: Image2.Picture.Graphic := jpgLogo;
           else
             Image3.Picture.Graphic := jpgLogo;
           end
        finally
           //jpgLogo.Free;
        End;
     finally
        RStream.Free;
     end
   end

end;

procedure TForm1.Image1Click(Sender: TObject);
begin
  Wahl(1);
end;

procedure TForm1.Image2Click(Sender: TObject);
begin
  Wahl(2);
end;

procedure TForm1.Image3Click(Sender: TObject);
begin
  Wahl(3);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  Randomize;
  autoposition:=Random(3)+1;
  for i:=low(tuer) to high(tuer) do
    tuer[i]:=TJpegImage.Create;
end;

end.
die Fehlermeldungen erscheinen am Ende des OnClick-Ereignis der TImage Komponenten.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
10.075 Beiträge
 
Delphi 12 Athens
 
#9

AW: JPG ohne Resource einfügen

  Alt 4. Okt 2016, 01:41
die Fehlermeldungen erscheinen am Ende des OnClick-Ereignis der TImage Komponenten.
Und welche?

Das hier kannst du auch kürzer schreiben, ich habe nur das Gefühl, dass das so nicht gemeint war:
Delphi-Quellcode:
           if i=1 then
           for j:=1 to 3 do
           case j of
            1: Image1.Picture.Graphic := jpgLogo;
            2: Image2.Picture.Graphic := jpgLogo;
           else
             Image3.Picture.Graphic := jpgLogo;
           end
Das ist das gleiche wie:
Delphi-Quellcode:
           if i = 1 then
           begin
             Image1.Picture.Graphic := jpgLogo;
             Image2.Picture.Graphic := jpgLogo;
             Image3.Picture.Graphic := jpgLogo;
           end;
Denn du gehst ja mit j die Werte 1, 2 und 3 durch und bei jedem davon wird eine der drei Zeilen ausgeführt. Am Ende also alle drei.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: JPG ohne Resource einfügen

  Alt 4. Okt 2016, 01:48
Ja genau, danke^^

wie löse ich jetzt das Problem?
Angehängte Grafiken
Dateityp: jpg error.jpg (20,1 KB, 27x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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