Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Icons, Cursors, Strings und benutzerdefinierte Ressourcen

von Mitgliedcsde_ratsSeite 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:
ICONSpeichern von SymbolenLoadIcon()
CURSORSpeichern von einem Cursor (Maussymbol)LoadCursor()
STRINGTABLESpeichern von mehreren Strings.LoadString()
BINTYPKann 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.

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 10.08.2007 von Mitgliedcsde_rats angelegt.
  • Die aktuellste Version wurde am 27.02.2009 von Mitgliedcsde_rats gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen