Entwickler-Ecke

Delphi Tutorials - Tutorial zu Ressourcen


Swordooo - Mi 20.08.08 13:16
Titel: Tutorial zu Ressourcen
Da mich einiger meiner Freunde, die auch Programmieren, immer wieder Fragen, wie man Res-Dateien (Ressourcen) erstellt, habe ich mir mal die Mühe gemacht und ein kleines Tutorial dazu geschrieben.

Schritt 1)
Der Übersicht zuliebe erstellst du dir einen Ordner, in dem alle deine *.rc und *.res Dateien "gelagert" werden.

Schritt 2)
Wenn du den Ordner erstellt hast, klickst du auf "Extras" -> "Ordneroptionen..." -> "Ansicht". Nun suchst du nach dem Eintrag "Erweiterungen bei bekannten Dateitypen ausblenden". Wenn erforderlich, entfernst du davor den Haken. Nun werden alle Datei-Endungen angezeigt.

Schritt 3)
Du klickst in den erstellten Ordner auf eine freie Fläche und dann auf "Neu" und dann auf "Textdukoment". Benenne die Datei so: DEINNAME.rc (DEINNAME ist variabel).

Schritt 4)
In dir *.rc Datei schreibst du nun folgendes: (Bsp: Du willst ein Bild (*.bmp) in die Ressource laden)


Quelltext
1:
2:
bild1 BITMAP "C:\Delphi Projekte\SDI SSYC\Data\Skin\button_beenden.bmp"
bild2 BITMAP "C:\Delphi Projekte\SDI SSYC\Data\Skin\button_beenden_move.bmp"


...usw.

Die Bedeutung ist folgende:

Name Dateityp "Pfad" (eigendlich ganz einfach)

Schritt 5)
Speicher es ab und klicke dann auf "Start" -> "Ausführen" unde gebe "cmd" (ohne "") ein. Drücke Enter!
Es erscheint die Eingabeaufforderung (CMD).

Schritt6)
Nun "wandelst du deine *.rc Datei in eine *.res Datei um, die du dann in dein Projekt einbinden kannst.
Dazu gebe folgendes ein:

brc32.exe "Pfad, in dem deine *.rc Datei liegt" (wenn es mit brc32.exe nicht funktioniert, dann nehme bitte brcc32.exe)

Drücke darauf Enter.

Nun solte in dem Verzeichnis, wo du deine *.rc liegt auch eine *res liegen.

Schritt 7)
Binde nun deine *.res in ein Projekt ein, in dem du folgendes in den Projekt schreibst:
Schreibe unter diese Zeile {$R *.dfm} diese Zeile {$R NameDerResDatei.res}. Also so:

Delphi-Quelltext
1:
2:
{$R *.dfm}
{$R NameDerResDatei.res}


Nun ist deine Datei fertig in des Projekt eingebunden.

Schritt 8)
Um jetzt etwas aus deiner Ressource zu laden, mache die hier (Bsp.):

Delphi-Quelltext
1:
2:
BitBtn1.Glyph.LoadFromResourceName(hinstance, 'bild1');
BitBtn2.Glyph.LoadFromResourceName(hinstance, 'bild2');

...usw...


So das war mein Tutorial und ich hoffe es gefällt und hilft euch weiter.

MfG Swordooo


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am Mi 20.08.2008 um 14:14


Swordooo - Mi 20.08.08 13:21

Aber eine Frage habe ich selber noch:
Welche Dateitypen gibt es in Ressourcen alle.
Ich kenn nur BITMAP und WAVE. Könnte jemand mal alle aufschrieben, wär echt nett.
Und kann man eine *.Res in einem laufenden Programm irgendwie erstellen, wie z.B. mit *.txt-Dateien (SaveToFile(xxx);)??

MfG

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Also ich meine auch das, was man in die RC schreibt, wie zB. bla BITMAP "xxx".
Hier ist BITMAP der DateiTyp. Welche gibt es alle?

MfG Swordooo


GTA-Place - Do 21.08.08 11:13

RC_DATA ist ein Typ für alle anderen Dinge, außer CURSOR, ICON, WAVE, BITMAP, etc.


elundril - Do 21.08.08 11:16

user profile iconGTA-Place hat folgendes geschrieben:
RC_DATA ist ein Typ für alle anderen Dinge, außer CURSOR, ICON, WAVE, BITMAP, etc.


kann man auch sagen was dieses etc. genau ist? Gibts vielleicht nen link wo alle typen aufgelistet stehen?

lg elundril


Swordooo - Fr 22.08.08 20:14

Zitat:
Gibts vielleicht nen link wo alle typen aufgelistet stehen?
:D :lol:
Das war ja auch meine Frage xD!

Weiß das wer?


matze - Mo 25.08.08 22:02

Hier: http://www.delphi-forum.de/viewtopic.php?p=519798#519798


Max312 - So 14.02.10 17:00

Hallo,

Ich weiß der Thread is schon nen paar Tage alt, aber ich dachte das is der beste Ort das zu schreiben:
Nämlich versuche ich Bilder in meine .Exe einzubinden. Ich bin auch schon (dank des tollen tutorials) soweit gekommen, dass ich eine .res-Datei mit allen meinen Bildern erstellen kann und diese Bilder auch in meinem Programm aufrufen kann.
Allerdings würde ich gerne noch einen Schritt weiter gehen. Nämlich würde ich die Bilder gerne mit einer Variable aufrufen.
Zum Verständnis...
vorher habe ich das so gemacht:

Delphi-Quelltext
1:
Karte1.Picture.loadfromfile(fileref);                    

"Karte1" ist meine Bildobjekt, habe ein kartenspiel, bei dem sich das angezeigte Bild halt immer ändert

"fileref" ist die variable(string), die den Namen der Bilddatei beinhaltet und wird durch eine Funktion je nach Spielsituation entsprechend verändert.

Das klappte bisher auch wunderbar, nur dass ich immer 70 Bilddateien mit der .exe mitgeben muss, was nervig ist. Weswegen ich mich für eine Einbindung durch resourcen entschieden habe.

Versteht ihr, was ich vorhabe? Könnt ihr mir helfen?

mfg

Max

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Xion - So 14.02.10 17:16

Ich hab zwar keine Ahnung davon (ich verwende Ordner statt res Dateien :D) aber da steht doch


Delphi-Quelltext
1:
BitBtn1.Glyph.LoadFromResourceName(hinstance, 'bild1');                    

Jetzt brauchst du nur

Delphi-Quelltext
1:
BitBtn1.Glyph.LoadFromResourceName(hinstance, fileref);                    

schreiben, wobei natürlich jetzt fileref keinen Dateinamen mehr beinhaltet, sondern den Namen, der in du in der Res Datei angegeben hast

Quelltext
1:
bild1 BITMAP "C:\Delphi Projekte\SDI SSYC\Data\Skin\button_beenden.bmp"                    


Max312 - So 14.02.10 17:51

jo, so hatte ich es auch versucht.
Hatte allerdings nich geklappt.
Jetz habe ich es glaube ich gelöst:
Man muss dann diese Variable(fileref) als "Pansichar" definieren. Ebenso natürlich die Funktion, die fileref ändert.
Dann scheint geht es.


Narses - Mo 15.02.10 00:27

Moin!

user profile iconMax312 hat folgendes geschrieben Zum zitierten Posting springen:
"Karte1" ist meine Bildobjekt, habe ein kartenspiel, bei dem sich das angezeigte Bild halt immer ändert
[...]
Könnt ihr mir helfen?
Der Ansatz mit einer Resource ist schon nicht schlecht, aber hier gibt es vermutlich auch die - wesentlich einfachere - Möglichkeit, eine TImageList zu verwenden (wenn die Bilder alle gleich groß sind, was bei einem Kartenspiel vermutlich der Fall ist). :idea:

cu
Narses