Tutorial
Icons, Cursors, Strings und benutzerdefinierte Ressourcen
von csde_rats | Seite 1 von 4 |
In diesem Tutorial möchte ich zeigen, wie man Symbole, Cursors und Stringtables direkt in ein Programm "verpackt".
Das Zauberwort hierfür heißt "Ressourcen". Ressourcen werden mithilfe eines RessourcenCompilers kompiliert und an das Programm angehängt.
Das Programm kann dann einfach die Ressourcen auslesen und weiterverwenden.
Im Folgenden eine Tabelle der verschiedenen Ressourcen Typen, und deren Lade-Funktionen, auf die ich später zurückkomme.
Typ: | Verwendungszweck: | Funktion: |
---|---|---|
ICON | Speichern von Symbolen | LoadIcon() |
CURSOR | Speichern von einem Cursor (Maussymbol) | LoadCursor() |
STRINGTABLE | Speichern von mehreren Strings. | LoadString() |
BINTYP | Kann zum speichern von (fast) allen Daten benutzt werden. | LoadResource() + LockResource() |
Wie mache ich das jetzt mit den Symbolen?
Wenn man Folgendes in eine .rc Datei schreibt (Mehr darüber, womit man solche Dateien erstellt, steht Hier)
#define MeinTollesIcon 10
MeinTollesIcon ICON DISCARDABLE "Icon.ico"
Wenn man ein Programm mit "fbc MeinProg.bas _Name_der_.rc_.rc" kompiliert, wird nun an das Programm das Icon angehängt.
Bei der Definiton einer WNDCLASS-Struktur kann man dann dieses Icon laden:
#define MeinTollesIcon 10
dim as WNDCLASS Klasse
with Klasse
.style = CS_HREDRAW or CS_VREDRAW
.lpfnWndProc = ProcPtr(Fenster)
.cbClsExtra = 0
.cbWndExtra = 0
.hInstance = GetModuleHandle(NULL)
.hCursor = LoadCursor(NULL, IDC_ARROW)
.hIcon = LoadIcon(getmodulehandle(null),MAKEINTRESOURCE(MeinTollesIcon))
.hbrBackground = GetStockObject(WHITE_BRUSH)
.lpszClassName = StrPtr(ProgrammName)
.lpszMenuName = NULL
end with
RegisterClass @Klasse
Das mit dieser Fensterklasse erstellte Fenster, wird das Icon "Icon.ico" in der Taskleiste und links in der Titelleiste haben.
Die entscheidende Zeile hierbei ist die Folgende:
.hIcon = LoadIcon(getmodulehandle(null),MAKEINTRESOURCE(MeinTollesIcon))
Nehmen wir das einmal auseinander:
.hIcon = LoadIcon(...)
Weist der Variable "hIcon" einen von LoadIcon() ermittelten Handle zu.
(getmodulehandle(null),...)
Sagt LoadIcon() in welcher Anwendung es zu suchen hat.
,MAKEINTRESOURCE(MeinTollesIcon))
Erzeugt aus "MeinTollesIcon" einen String, mit dem LoadIcon() das Icon dann finden kann.
Mit einem Cursor verhält es sich genauso, man muss nur das Ganze bei .hCursor = ... hinschreiben. Außerdem heißt es natürlich nicht
LoadIcon() sondern LoadCursor(). Im Ressourcen-Skript muss man dann
#define MeinTollerCursor 11
MeinTollerCursor CURSOR DISCARDABLE "Cursor.cur"
schreiben.
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|