Schriftart erzeugen und zuweisen


Unser Label wird normalerweise mit der Standardschriftart des Systems beschriftet, was nicht immer gewünscht ist oder gut aussehen muss. Um eine eigene Schriftart zu benutzen, bedienen wir uns der Funktion "CreateFont":

MyFont := CreateFont(FontSize, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET,
  OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
  DEFAULT_PITCH, FontName);

Eine genaue Beschreibung finden Sie in der Hilfe oder im MSDN. Soviel sei gesagt: als Rückgabewert liefert die Funktion ein Handle auf eine logische Schrift. Der erste Parameter gibt die Schrifthöhe an und sollte immer einen negativen Wert haben, und der letzte Parameter definiert den Namen unserer Schrift (eine der vielen installierten Schriftarten kann hier benutzt werden). Der Einfachheit halber habe ich beides auch wieder als Konstanten deklariert.

Nun ist aber nicht nur Windows in der Lage Nachrichten zu senden. Auch wir können Nachrichten verschicken. In diesem Fall müssen wir das sogar tun, wenn wir unserem Label die neu definierte Schriftart zuweisen wollen. Wir benutzen dazu die Nachricht "WM_SETFONT". Unser Ziel erreichen wir dabei mit einer sehr wichtigen Funktion, die wir in vielen nonVCL-Projekten noch brauchen werden: SendMessage. Diese Funktion hat vier Parameter. Da wir eine Nachricht an ein Fenster schicken wollen, benötigen wir zuerst natürlich dessen Handle. An zweiter Stelle kommt dann die gewünschte Nachricht. Lediglich die beiden letzten Parameter bedürfen einer näheren Erklärung: Jede Nachricht hat zwei zusätzliche Parameter, die sie weitergeben kann. Manchmal ein Integerwert zur Statusänderung, manchmal ein als Integer konvertierter Zeiger auf Text usw. (An geeigneter Stelle kommen wir noch dazu.) In einigen Fällen werden einer oder auch beide Parameter nicht genutzt und stattdessen mit Null angegeben.
Die beste Anlaufstelle sollte für Sie hier wieder die Hilfe oder das MSDN sein, denn hier finden Sie die Nachrichten inkl. der Parameter, die benötigt werden.

Um bei unserem Font-Beispiel zu bleiben, unser Aufruf müsste so aussehen:

if MyFont <> 0 then
  SendMessage(hwndLabel2, WM_SETFONT, Integer(MyFont), Integer(true));