Tutorial
Icons, Cursors, Strings und benutzerdefinierte Ressourcen
von csde_rats | Seite 3 von 4 |
Benutzterdefinierte Resourcen
Was ist das denn schon wieder!?
Ganz einfach. Wir können jetzt Symbole, Mauszeiger, und Text speichern. Aber wie sieht's mit dem eigenen Dateiformat aus?
Hier helfen benutzterdefinierte Ressourcen. In ihnen kann man alles speichern, was man will, lediglich das Zeichen 0 (chr(0)) bereitet
Probleme. Ich zeige nur kurz, wie man eine benutzterdefinierte Resource einfügt und ausliest.
Das Resourcen-Skript:
#define MeineRes 13
MeineRes BINTYP DISCARDABLE "TolleDatei.dat"
Zum auslesen:
#define MeineRes 13
Dim As HWND hRes
Dim As ZString Ptr pData
hRes = LoadResource(getmodulehandle(null), FindResource(hInstance,MAKEINTRESOURCE(MeineRes),"BINTYP"))
pData = LockResource(hRes)
Open "bla.txt" For Output As #1
Print #1, *pData
Close #1
FreeResource(hRes)
LoadResource() kann - wie LoadString() - nur mit ZStrings umgehen.
Dim As HWND hRes
Hiermit definieren wir den Handle zur Ressource.
Dim As ZString Ptr pData
Dort werden die Daten liegen.
hRes = LoadResource(getmodulehandle(null),...)
Hier wird LoadResource() gesagt, in welcher Datei sie suchen muss. (Natürlich in der eigenen .EXE-Datei)
...,FindResource(hInstance,MAKEINTRESOURCE(MeineRes),"BINTYP"))
Hier wird eine Art "zwischenhandle" zu unserer Ressource erzeugt.
pData = LockResource(hRes)
Hier wird die Ressource ausgelesen und der Inhalt in den automatisch belegten Speicher geschrieben.
Open "bla.txt" For Output As #1
Print #1, *pData
Close #1
Hier wird der Inhalt der Ressource in die Datei "bla.txt" geschrieben.
FreeResource(hRes)
Der von LockResource() belegte Speicher wird wieder freigegeben. (pData zeigt nun auf einen ungültigen Speicherbereich)
Man kann sich auch eine Function schreiben, die eine Ressource in eine Datei speichert:
dim shared hInstance as HINSTANCE
hInstance = GetModuleHandle(NULL)
Function resource_SaveUserDefinedResourceToFile(RESID As Integer, RESTYPE As String, File As String) As Integer
Dim As HWND hRes
Dim As ZString Ptr pData
Dim As Integer Erfolg
hRes = LoadResource(hInstance, FindResource(hInstance,MAKEINTRESOURCE(RESID),RESTYPE))
pData = LockResource(hRes)
If *pData <> "" Then
Erfolg = TRUE
Open File For Output As #1
Print #1, *pData
Close #1
Else
Erfolg = FALSE
End If
FreeResource(hRes)
Return Erfolg
End Function
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|