Hallo Reinhard,
ich hab mal nen neues Thema aufgemacht, weil der alte damit weniger zu tun hatte.
Aber nun zum Thema
Du kannst das so verstehen. Du erstellst eine Resourcen Datei *.res. Diese kannst du unter VB einbinden. Somit wird sie mit in das Programm eincompiliert. Sicher stellt sich nun die Frage. Wozu das ganze?
Nehmen wir folgende Bsp.
Du willst deine Anwendung in mehreren Sprachen entwickeln
Du willst je nach OS eine andere DLL verwalten
Du willst verschiedene Graphiken in ein und der selben PictureBox anzeigen
Ich koennte noch soviel dazu aufzaehlen :s
Diese Daten stehen dir aber je nach Ladeanweisung nicht direkt zur Verfügung. Diese musst du zur Laufzeit aus dem File herausholen. Dabei gibt es wiederrum auch verschiedene Dinge zu beachten
Auch musst du schauen, um was es sich handelt.
Ist es ein Bild
Ist eine Zeichenfolge
Ist es eine Datei
etc.
Das defnierst du beim erstellen der Datei. Sie muss den Namen *.rc tragen. Mit dem Resourcen Compilier der mit Vb ausgeliefert wird, kannst du dann das *.RES File erzeugen, was du einbinden kannst
Noch einmal schnell zum Thema, ob die Daten gleich zur Verfügung stehen. Dazu hast du ja die Ladeoptionen. Und je nachdem musst du sie extrahieren oder nicht
Ladeoptionen
PRELOAD-Ignoriert. Unter 16-Bit Windows wird die Ressource mit der Anwendungsdatei geladen
LOADONCALL-Ignoriert, Unter 16-Bit Windows wird die Ressource geladen, wenn sie aufgerufen wird
Desweiteren kannst du auch Speicherattribute angeben.
Speicherattribute:
FIXED-Ignoriert. Unter 16-Bit Windows bleibt die Ressource an einer bestimmten Speicherposition
MOVEABLE-Ignoriert. Unter 16-Bit Windows kann die Ressource verschoben werden, um den Speicher zusammenzufassen
DISCARDABLE-Die Ressource kann geleert werden, wenn sie nicht mehr länger gebraucht wird.
PURE-Ignoriert. Erwartet für die Kompatibilität mit existierenden Ressourcenscripts
IMPURE-Ignoriert. Erwartet für die Kompatibilität mit existierenden Ressourcenscripts
Wobei hier für Daten vom Typ Cursor, Icons und Schriftartenressourcen
DISCARDABLE voreingestellt ist!
Willst du ein Menu aus einer Resource laden so hast du noch optionale Parameter, die du angeben kannst.
optionale parameter:
CHARACTERISTICS-dWord-Benutzerdefinierte Information über eine Ressource, die von Werkzeugen verwendet werden kann, die Ressourcendateien lesen und schreiben
LANGUAGE-lang., sublang.-Gibt die Sprache für die Ressource an. Die Parameter sind Konstanten aus WINNLS.H
VERSION-dWord-Benutzerdefinierte Versionsnummer der Ressource, die von Werkzeugen verwendet werden kann, die Ressourcendateien lesen und schreiben
Somit haetten wir glaube fast alles. Eines sollte man noch wissen.
Wenn du eine Benutzerdefinierte Resource erstellst, so musst du die Rohdaten angeben!
Rohdaten
Gibt Rohdaten an, die aus einer oder mehreren Ganzzahlen oder Texten aus Zeichen besteht. Ganzzahlen (Integers) können in Dezimal-, Oktal-, oder Hexadezimalformat angegeben werden. Der Ressourcen-Compiler fügt einem String nicht automatisch ein abschliessendes Nullchar hinzu. Der String ist eine Folge von ANSI (Byte) Zeichen, Strings in allen Ressourcen ausser RCDATA und benutzerdefinierten Ressourcen sind Unicode-Strings. Es ist die Aufgabe des Programmierers, die Daten optimal auf die Architektur des Zielcomputers anzupassen.
Somit sollten wir eigentlich das wichtigste haben.
Wie du nun siehst, kannst du in einer Resource so ziemlich alles packen, was du möchtest Sie ist flexibel und eigentlich ganz simple.
Nun noch einmal ein paar Bsp. wie eine Resourcen Datei ausschauen koennte!
Icon:
desk1 ICON desk.ico
11 ICON DISCARDABLE custom.ico
Menu:
menuID MENU [load-mem] [optional-statements]
BEGIN
item-definitions
...
END
Sprich:
sample MENU
BEGIN
MENUITEM "&Soup", 100
MENUITEM "S&alad", 101
POPUP "&Entree"
BEGIN
MENUITEM "&Fish", 200
MENUITEM "&Chicken", 201, CHECKED
POPUP "&Beef"
BEGIN
MENUITEM "&Steak", 301
MENUITEM "&:stuck\_out\_tongue\_winking\_eye:rime Rib", 302
END
END
MENUITEM "&Dessert", 103
END
Zeichenfolge:
STRINGTABLE [load-mem]
[optional-statements]
BEGIN
stringID string
...
END
Sprich:
#define IDS\_HALLO 1
#define IDS\_CIAO 2
STRINGTABLE
BEGIN
IDS\_HALLO, "Hallo"
IDS\_CIAO, "Ciao"
END
Benutzerdefnierte Resource:
nameID typeID [load-mem]
BEGIN
daten
END
Sprich:
array MYRES data.res
14 300 custom.res
18 MYRES2BEGIN
"Here is a data string\0", /\* A string, null-terminated \*/
1024, /\* int \*/
0x029a, /\* hex int \*/
0o733, /\* octal int \*/
"\07" /\* octal byte \*/
END
Cursor:
nameID CURSOR [load-mem] filename
Sprich:
cursor1 CURSOR bullseye.cur
2 CURSOR "d:\\cursor\\arrow.cur"
Bitmap:
nameID BITMAP [load-mem] filename
Sprich:
disk1 BITMAP disk.bmp
12 BITMAP PRELOAD diskette.bmp
So, soviel erst einmal zum Aufbau eines Resourcen Files.
Natuerlich stehen ja nun die Daten nicht zur Verfügung :s
Um nun an die Daten zu kommen, gehen wir wiefolgt vor.
Nehmen wir einmal an. Du hast die Resource und darin Strings
ID String
1 Hallo
2 Ciao
3 Wie geht es Dir?
4 Woher kommst du
101 Hello
102 Bye
103 How are you?
104 Where do you come from
Dein Program startet und du fragst dem Anwender, welche Sprache er möchte und er wählt eine aus. Sagen wir mal für deutsch ist es die 0 und Englisch die 1. dann koenntest du via
dim ID as long
dim Sprache as Integer
Sprache=1 ' Englisch
ID=sprache\*100+1
die ID ermitteln. Je nachdem ob er deutsch oder englisch möchte bekommst du die 101 oder die 1
Und nun endlich der spannenste Teil. Wie kommt man nun an die Resource. Das ist ganz einfach
Zeichenfolge:
LoadResString(Index)
Bsp:
Label1.caption=LoadResString(ID)
Bilder:
LoadResPicture(Index, Format)
wobei für Format folgendes gilt:
vbResBitmap-0-Bitmap-Ressource
vbResIcon -1-Symbolressource
vbResCursor-2-Cursor-Ressource
Bsp:
Picture1.Picture=LoadResPicture(ID,0)
Benutzerdefiniertes Format:
LoadResData(Index, Format)
wobei Format für folgendes steht
Bitmap-Bitmap-Grafiken aller Farbtiefen, keine JPEGs, GIFs etc.
Cursor-Cursor-Dateien
Icon-Icon-Dateien
String Table-Texttabellen
Custom-Benutzerdefinierte Datentypen z.B. "CUSTOM" oder "WAVE"
Bsp:
Dim vRet as String
vRet=LoadresData(ID,"CUSTOM")
In vRet waere nun der Inhalt der Benutzerdefinierten Resource. Wenn es
ein File waere, so koennte man nun den Inhalt auf die HD schreiben und das File öffnen :wink:
So, ich hoffe ich habe ein wenig Licht ins Dunkel gebracht
MfG Alex