Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
okay, jetzt komme ich gar nicht mehr dazu, irgendeinen stream zu erstellen,
weil das programm gar nicht mehr compiliert wird...
sobald ich {$R lemon.dll} schreibe, meldet sich RLINK32 mit
Unsupported 16bit resource in file "blabla"
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Du musst ja auch die Resource einbinden und nicht die DLL. Wenn du die Resourcen in deiner DLLhaben willst musst du die *.res in einer Unit in deiner DLL einbinden. Oder in der *.dpr.
Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
hab ich, denke ich, gemacht...
also eine .rc datei erstellen in der die tga's genannt werden
mit der brcc32.exe eine .res datei erstellt, die die tga's enthält
die .res datei in ein DLL Projekt eingebunden und das Projekt compiliert
dann hab ich eine dll datei, die die tga bilder enthält
(und noch ein bisschen mehr, wenn man sie mit deinem resource explorer anguckt)
ich dachte, die dll müsste ich jetzt mit meinem hauptprojekt verbinden, damit
ich darauf zugreifen kann... ah moment...
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Du musst die DLL dann in deinem Hauptprogramm mittels LoadLibrary laden. Würde dir aber wohl empfehlen, dass du die *.res am besten mit dem Resource Explorer erstellst. Ist wesentlich kompfortabler.
Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
ja, mit loadlibrary, darauf bezog sich das "moment mal" in meinem vorherigen post, da fing der groschen gerade an zu fallen mit TResourceStream.Create geht es weiterhin nicht, dafür aber mit TResourceStream.CreateFromId - ist mir wurscht, so lange es geht - dat muss ich mir n test programm schreiben um zu sehen, ob es geht...
naja, ich habe über 900 tiles, die alle in den resource explorer zu laden, ich weiß nicht - weil strg-a nicht geht im öffnen dialog
da schreib ich mir vll besser ein script, dass eine textdatei vollschreibt, mal sehen...
hehe, wenn ich statt der Textures.pas einfach in der uses die glBitmap eintrage ohne code anzupassen passieren komische sachen...
Ich danke dir für deine Geduld mit mir!!
EDIT:
Jesses, ich glaub ich bin am Ziel angekommen!! Yeah!!! Jetzt kann es weitergehen
Hach ja, ich freu mich
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
doppelreim hat geschrieben:
hehe, wenn ich statt der Textures.pas einfach in der uses die glBitmap eintrage ohne code anzupassen passieren komische sachen...
Ja das mag durchaus sein. Ist ja nicht das gleiche sondern soll nur zum Umstiegshilfen dienen. Wenn die textures nicht so verbreitet wäre, dann hätte ich auf die Methoden wohl ganz verzichtet und nur den Objekt Orientierten Weg eingebaut.
Ach ja. Das mit LoadFromResourceID. Das hatte ich fast vergessen. Du kannst natürlich auch alle Resourcen als Zahlen ablegen und dann musste da ne ID übergeben. Das ist alles ein bisschen wirr das mit den Resourcen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Könnt ihr hier jetzt mal ne Schrittweise Anleitung abgeben, wie man Grafikdateien so verpackt, dass net jeder Wald und Wiesendepp mit Paint die Grafiken verunstalten kann?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
ich werd's gerne versuchen...
also die bilder - oder sounds, icons, sätze, was du willst - werden in eine ressourcen-datei gesteckt. die hat die dateiendung .res
um eine solche zu erstellen gibt es mehrere möglichkeiten...
1.) Du benutzt das Programm Resource Explorer, den Link hat Lossy hier gepostet. Das ist eigentlich recht einfach und speichert dir deine Ressourcensammlung direkt als .res Datei
2.) Die andere Möglichkeit ist etwas mehr Arbeit: die schnappst dir Notepad oder sonst irgendeinen Editor und erstellst eine Datei mit folgendem Format:
<Ressourcenbezeichner> <Resourcentyp> <Pfad zur Datei>
beispielsweise:
myCharTex BITMAP char.tga
Ressourcenbezeichner: ist der Name, den du der Ressource gibst. Statt einem String kannst du auch ne Zahl hinschreiben, also
10 BITMAP holla.bmp
ich mache das so, weil ich in meinem Programm lieber mit nem Haufen geordneter Zahlen arbeite, als mit nem Haufen Strings
Ressourcentyp: Es gibt einige vordefinierte, die hat Lossy auch hier irgendwo erwähnt. Für alle Sachen, die nicht explizit nen eigenen Typ haben gibt es RCDATA, das wär dann wohl allgemeine Datenvielfalt, oder so
Pfad zur Datei ist selbsterklärend denke ich. Kann sein, dass man Gänsefüsschen setzen muss, keine Ahnung - testen!
Jetzt hast du im Editor zeilenweise deine Ressourcen angegeben und speicherst das Werk erstmal als .rc Datei ab.
Dann gibt es in deinem Delphi Verzeichnis einen Ordner "bin" und in selbigem eine Datei brcc32.exe - die brauchen wir jetzt.
Die .rc Datei enthält ja nur die Dateinamen zu den Ressourcen die du haben willst. brcc32.exe nimmt sich diese Datei und packt die darin angegebenen Ressourcen in eine .res Datei
Dazu ruft man die brcc32 in der Kommandozeile auf und übergibt als Parameter den Pfad zur .rc Datei
Ipp Zipp Zapp, fertig ist die .res Datei
Hehe, 2. ist echt länger als 1. aber dafür gibts ja auch n bisschen Hintergrund wissen...
Weiter im Text. Von hier aus gibts wieder mehrere Wege ich beschreibe aber nur meinen. Ich wollte die Ressourcen in einer eigenen Datei haben, unabhängig von der Hauptanwendung. Wenn man die .res Datei in das Hauptprojekt eingebunden hätte, wäre sie beim compilieren mit in die exe hineinkompiliert geworden wurden hätten. (wird sain gevezz, na wer kennt's?)
Weil wir das aber nicht wollen, gehen wir her und erstellen in Delphi ein neues DLL Projekt.
Den vorgeschrieben Quelltext ersetzen wir mit:
Code:
library lemon;
{$R lemon.RES}
begin
end.
wobei lemon.RES natürlich auf euren .res Datei Dateinamen angepasst werden sollte Wunderbar, jetzt speichern wir das Projekt, compilieren es und der ein oder andere kann auch "Hosianna" rufen, denn jetzt haben wir eine wunderschöne .dll Datei, die all unsere Resourcen enthält. Und ich denke, jeder gewöhnliche Wald und Wiesen Depp, wird sich denken "Möh? DLL - Wasn datt da? Kann man das essen?? Lass ich mal lieber in Ruhe" Hehe, aber wir sind noch nicht am Ziel... wir müssen die Daten ja auch wieder aus der DLL rausbekommen. Da brauchen wir erstmal eine Variable vom Typen Papst ääh, Cardinal. Der weisen wir mittels
Code:
h := LoadLibrary('lemon.dll');
die eben erstelle DLL Datei zu. Wenn du jetzt in LoadFromRessource oder ähnlichen Funktionen als Parameter eine Instance angeben sollst, ist das unsere Cardinal Variable, die ja auf die DLL zeigt. Bei der glBitmap.pas laden wir allerdings immer aus Streams (für mich ein dunkles Kapitel, aber ich werde auch das versuchen zu schreiben ) Man nehme
Ich hab den Resource Stream from ID created, es geht auch nur mit Create, dann muss man, denke ich, nen String angeben, aber ich arbeite wie gesagt lieber mit Zahlen.
Sohohohoho, ich hoffe, ich habe alles erwähneswerte erwähnt und wenn es jemandem hilft, dann bin ich mächtig stolz, auch mal ne Antwort gegeben zu haben, statt immer nur zu Fragen - Yeah!
Damit kann man übrigens auch wunderbar solche Icon-Sammlungen anlegen, wie man sie in Windows findet.
Legt ihr eine Verknüpfung z.B. zum Explorer auf dem Desktop an, so könnt ihr ja auch ein anderes Symbol auswählen. In dem dazugehörigen Dialog wählt ihr als Datei aber nicht icon.ico aus sondern z.B. sysicons.dll Dort habt ihr dann gleich mehrere Icons zur Auswahl
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.