Entwickler-Ecke
Sonstiges (Delphi) - Bilder in DLL oder so speichern
Danny87 - Do 21.09.06 14:02
Titel: Bilder in DLL oder so speichern
Hey Leute,
da ich nicht will, dass mein Spiel von jedem X-Beliebigen gemoddet werden kann, möchte ich die Bilder
gerne in einer DLL oder so speichern, damit man sie nicht mehr mit einem Grafikprogram öffnen kann.
Ausserdem möchte ich in so einer Datei ganze Image-Sets ablegen.
Gibt es da möglichkeiten?
Ich habe leider absolut keine Ahnung, wie ich das machen soll... :-/
Waäre cool, wenn ihr mir ein paar Tips geben könntet wonach ich suchen kann und/oder womit ich mich
beschäftigen muss um das zu realisieren (wenn das überhaupt geht).
Gruss
Daniel
Nemesis II - Do 21.09.06 14:59
bei kleinen Sachen mache ich das über die Resource-Funktion, da bleiben die Dateien in der Anwendung erhalten, ohne dll
öffne Texteditor > Eingabe:
ResName1 ResTYPE1 ResFileName1
ResName2 ResTYPE2 ResFileName2
...
ResNameX ResTYPEX ResFileNameX
ResName1 = Name der Datei zum identifizieren bei Delphi
ResTYPE1 = Der Typ der Recource Datei: WAVE, AVI, RCDATA (geeignet für Bilder oder andere Dateien), CURSOR
ResFileName1 = komplette Pfad der zu einbindenden Datei
speichere den Text als (*.RC) Datei
öffne Resource Compiler BRC32.exe (C:\Programme\Borland\BDS\3.0\Bin) bzw. schiebe die (*.RC) Datei darüber
es wurde eine (*.RES) Datei erstellt
kopiere (*.RES) Datei zum Project Ordner in Eigene Dateien
(*.RES) Datei in Delphi verlinken:
Delphi-Quelltext
1: 2: 3:
| implementation {$R *.dfm} {$R Namer der Datei.RES} |
RESOURCE-DATEI aufrufen für Video:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); begin with Animate1 do begin ResName := 'ResName1'; ResHandle := hInstance; Active := TRUE; end; end; |
RESOURCE-DATEI aufrufen für WAVE:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| uses mmsystem; ... procedure TForm1.Button1Click(Sender: TObject); var hFind, hRes: THandle; Song: PChar; begin hFind:=FindResource(HInstance, 'ResName2', 'WAVE'); if hFind<>0 then begin hRes:=LoadResource(HInstance, hFind); if hRes<>0 then begin Song:=LockResource(hRes); if Assigned(Song) then SndPlaySound(Song, snd_ASync or snd_Memory); UnlockResource(hRes); end; FreeResource(hFind); end; end; |
RESOURCE-DATEI aufrufen für MP3:
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:
| procedure TForm1.Button1Click(Sender: TObject); var rStream: TResourceStream; fStream: TFileStream; fname: string; begin
fname:=ExtractFileDir(Paramstr(0))+'Intro.mp3'; rStream := TResourceStream.Create (hInstance, 'Intro', RT_RCDATA); try fStream := TFileStream.Create(fname, fmCreate); try fStream.CopyFrom(rStream, 0); finally fStream.Free; end; finally rStream.Free; end;
MediaPlayer1.Close; MediaPlayer1.FileName:=fname; MediaPlayer1.Open; end; |
RESOURCE-DATEI aufrufen für CURSOR:
Delphi-Quelltext
1: 2: 3: 4: 5:
| const crMyCursor = 1; begin Screen.Cursors[crMyCursor] := LoadCursor(hInstance,PChar ('ResName vom Cursor')); Form1.Cursor := crMyCursor; end; |
Danny87 - Do 21.09.06 15:46
nee, soll ja dynamisch austauschbar sein.
hab mir das auch schon mit res überlegt, aber die werden ja beim compilieren in den code includet und sind somit nicht dynamisch austauschbar.
//EDIT: oder irre ich mich da?
wulfskin - Do 21.09.06 21:28
Danny87 hat folgendes geschrieben: |
| nee, soll ja dynamisch austauschbar sein. |
Ja, das wird so einfach dann nicht gehen.
Ich würde sie mit einem einfachen Algorithmus verschlüsseln und das Problem wäre gelöst...
Danny87 - Do 21.09.06 23:02
dann hätte ich aber jedes bild einzeln, aber ich brauch ja ganze imagesets.
jakobwenzel - Fr 22.09.06 08:08
Würds denn nich gehen, die ganzen Bilder, ... als Resource in ne DLL einzubinden und dann von da zu laden?
Danny87 - Fr 22.09.06 13:27
hmm....das muss ich mal ausprobieren.
meld mich dann nochmal :-)
Danny87 - Fr 22.09.06 13:53
Entweder mach ich was falsch oder .... nee, ich mach was falsch...
So stehts in der DLL:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| {$R Untitled1.res}
procedure test(var image : TImage; HInstance : cardinal); stdcall; begin image.Picture.Bitmap.LoadFromResourceName(HInstance,'Bitmap1'); end; |
aber wenn ich aus dem Programm die Prozedur "test" aufrufe bringt er mir ne Fehlermeldung, dass die
Ressource Bitmap1 nicht gefunden werden konnte.
Ich hab mal 2 Screenshots angehängt. Einer von der res-Datei (im Imageeditor geöffnet) und der andere von der Fehlermeldung.
Danny87 - Mo 25.09.06 15:26
Kann mir wirklich keiner sagen, was ich falsch mache und/oder wies richtig geht? :cry: :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!