Autor Beitrag
Johnson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Di 23.05.06 22:32 
hi,

ich habe schon tage verbracht um herrauszufinden, wie man dateien in eine ressoucendatei bekommt.
habe schon gute erklährungen gefunden, wie man diese erstelt, doch nicht wie man dateien da rein bekommt.

ich will da bilder rein tun und später dann noch lieder, doch wie geht das?
DelphiAnfänger
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 112

Win XP, Firefox 2.0, IE6
Delphi 5 Prof., Delphi 2005 PE
BeitragVerfasst: Di 23.05.06 22:38 
für Bilder:
  1. du erstellst eine RC datei die folgendermaßen aussieht:
    ausblenden Quelltext
    1:
    2:
    3:
    BILD1 RCDATA "Bild1.jpg"
    BILD2 RCDATA "Bild2.jpg"
    ...

  2. kopier die Datei "brcc32.exe" aus deinem Delphi/Bin verzeichnis in das verzeichnis in dem deine rc datei und die bilder sind
  3. führe im cmd folgenden Befehl aus (in dem Verzeichnis in dem die bilder und die rc datei liegt): BRCC32 BILDER.RC
  4. jetzt müsstest du eine BILDER.res Datei haben
  5. jetzt schreibst du in deinem Projekt(Unit1)
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    var
      Form1: TForm1;

    implementation

    {$R *.DFM}
    {$R BILDER.RES}

  6. die Bilder kannst du folgendermaßen aufrufen:
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    9:
    10:
    11:
    12:
    procedure TForm1.Bild1laden;
    var Bild: TJPEGImage;
      resstream: TResourceStream;
    begin
      Bild := TJPEGImage.Create;
      resstream := tresourceStream.Create(hInstance, 'BILD1', RT_RCDATA);
      Bild.LoadFromStream(resstream);
      Bildbezeichner.Picture.Assign(bild);
      //statt Bildbezeichner schreibst du den namen den du der TImage komponente gegeben hast (Objektinspektor)
      bild.free;
      resstream.free;
    end;

  7. in deinem Projekt wenn das Bild angezeigt werden soll einfach die procedur Bild1laden aufrufen


hier nochmal ein Beispiel für eine unit die beim klicken auf Button1 Bild1 anzeigt und beim klick auf Button2 Bild2 :
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Bild1: TImage;
    Bild2: TImage;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Bild1laden;
    procedure Bild2laden;
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
{$R BILDER.RES}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Bild2.Picture:=nil//Bild zwei löschen
 Bild1laden;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Bild1.picture:=nil//Bild eins löschen
 Bild2laden;
end;

procedure TForm1.Bild1laden;
var Bild: TJPEGImage;
  resstream: TResourceStream;
begin
  Bild := TJPEGImage.Create;
  resstream := tresourceStream.Create(hInstance, 'BILD1', RT_RCDATA);
  Bild.LoadFromStream(resstream);
  Bild1.Picture.Assign(bild);
  bild.free;
  resstream.free;
end;

procedure TForm1.Bild2laden;
var Bild: TJPEGImage;
  resstream: TResourceStream;
begin
  Bild := TJPEGImage.Create;
  resstream := tresourceStream.Create(hInstance, 'BILD2', RT_RCDATA);
  Bild.LoadFromStream(resstream);
  Bild2.Picture.Assign(bild);
  bild.free;
  resstream.free;
end;


end.

angahängt noch ein beispiel für bilder. Sounds weiß ich nicht wie man es macht
EDIT:falsches highlight entfernt
Einloggen, um Attachments anzusehen!
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: Di 23.05.06 23:16 
Zumindest mit WAV-Sounds sieht es genauso aus, mit anderen Formaten habe ich in Delphi bisher nicht gearbeitet.

ausblenden Resource-Datei mit Wave-Files
1:
START_SOUND WAVE hallo.wav					


Bei der Benutzung von Sounds ist es wichtig, dass die MMSystem unter Uses eingetragen ist, sonst funktioniert es nicht. Außerdem könnte es sich als sinnvoll herausstellen, vor Abspielen des Sounds zu überprüfen, ob überhaupt eine Soundkarte existiert, da das Programm sonst jedes Mal, wenn ein Sound abgespielt werden soll eine entsprechende Fehlermeldung ausgibt, was doch vor allem im Spieleentwicklungsbereich sehr nervig werden kann.

ausblenden Benutzung von Sounds in Resource
1:
2:
3:
4:
5:
6:
7:
uses MMSystem;

{...}

if WaveOutGetNumDevs>0 then
  PlaySound(pchar('START_SOUND'),hInstance,
            SND_ASYNC or SND_NODEFAULT or SND_RESOURCE);


Zu deiner Frage, wie man Dateien in eine Resource-Datei reinkriegt, allgemein: Die habe ich doch schon detailliert und Schritt für Schritt in diesem Thread beantwortet (inkl. Beispielanwendung)...

Naja, ich hoffe nun ist es angekommen :lol:
Johnson Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Mi 24.05.06 11:02 
hallo,

also das ist mir soweit klar (wie man das in delphi aufruft.), doch was ich noch nicht richtig verstehe ist folgende zeile:

ausblenden Delphi-Quelltext
1:
2:
3:
BILD1 RCDATA "Bild1.jpg"  
BILD2 RCDATA "Bild2.jpg" 
....


also ich kopiere mir meine (probeweise) zwei bilder in einen ordner, dann erstelle ich ein textdokument mit namen test.rc .
dann kopiere ich die brcc32.exe aus den verzeichnis in meins.
starte cmd und gebe BRCC32 Test.RC ein.
dann erstellt der mir ne res datei, doch das is doch irgendwie falsch oder?
denn egal wieviele bilder ich drin habe, die res datei is immer gleich groß.
und außerdem weiß der pc doch gar nich dass er alle dateien da mit rein machen soll.

könnt ihr mir das bitte nochmal erklähren?
(wenn ihr die ruhe dazu habt ) :roll:
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Mi 24.05.06 11:36 
Zum Erstellen kann ich dir mein Programm RFE ( rfe.sf.net ) empfehlen.
Zum Einbinden findest du auf www.fw-web.de/units.htm an 7. Position die resload.zip, dort findest du Beispiele, wie du verschiedene Resourcentypen einbindest.

Gruß Frank
DelphiAnfänger
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 112

Win XP, Firefox 2.0, IE6
Delphi 5 Prof., Delphi 2005 PE
BeitragVerfasst: Mi 24.05.06 15:26 
in der test.rc musst du statt "Bild1.jpg" den namen des bildes schreiben. Wenn dein bild schon im jpg format ist ansonsten musst du es umwandeln du kannst das zwar auch mit bitmaps machen aber die sind viel größer deswegen nehm ich immer JPG's
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: Mi 24.05.06 23:43 
Hallo,

okay ich versuche es nochmal ganz langsam zu erklären mit der Erstellung einer Resource-Datei:

Zunächst erstellst du eine Datei mit der Endung .rc. Diese Datei wird nachher von brcc32 zu einer .res-Datei kompiliert.

In der rc-Datei spezifizierst du die Dateien, die du deinem Programm einbinden möchtest. Dafür musst du deiner Datei einen eindeutigen Resourcennamen geben, entweder in Form einer ID (also einer Zahl), oder einem Namen. Darauf folgt die Information, um welchen Typus Datei es sich handelt und schließlich der Datei-Name. Die entsprechende Datei muss natürlich unter angegebenen Pfad auch vorhanden sein.

ausblenden Beispiel-Resource-Datei: beispiel.rc
1:
2:
3:
4:
5:
101 BITMAP bild1.bmp
102 BITMAP bild2.bmp

201 WAVE sound1.wav
202 WAVE sound2.wav


Nachdem du diese Datei erstellt und gespeichert hast, kommt das Programm brcc32 ins Spiel, welches deine Datei ausliest und zu einer .res-Datei kompiliert, welche deine Dateien beinhaltet.

Diese .res-Datei kannst du dann zu deinem Programm auf folgende Weise hinzubinden:

ausblenden Beispielanwendung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
{$R beispiel.res}

end.


Schau dir eventuell auch mal die Beispielanwendung an, die ich im oben genannten Thread für dich geschrieben habe; da ist auch alles gut zu sehen. Falls es dann immer noch nicht klappt, sollten wir uns vielleicht mal einen Chat aussuchen, oder von mir aus auch ein Telefonat führen, denn es wird doch mühsam immer das gleiche zu schreiben und dann kann man vermutlich besser analysieren, wo denn genau das Problem liegt :) Sollte hierauf Bedarf bestehen, schreibe mir einfach eine PM...