In diesem Tutorial konzentrieren wir uns auf Labels und das Ändern der Schriftart in solchen. Auf dem herkömmlichen Weg mit der VCL ist es ja recht einfach, solche statischen Texte auf das Formular zu setzen und zu beschriften. Ohne die VCL müssen wir uns dazu u.a. etwas näher mit der Funktion "SendMessage" befassen. Unsere Labels erstellen wir am besten wenn unser Fenster die Nachricht "WM_CREATE" erhält. Dazu die (freie) Übersetzung aus dem MSDN:
Einen besseren Ort kann es also kaum geben.
Nun würde Windows nicht "Windows" heißen, wenn sein Hauptbestandteil nicht Fenster wären. Und so merkwürdig sich das manchmal auch anhören mag, wir sollten uns darüber im Klaren sein, dass es sich bei fast jedem Element um ein Fenster handelt. Auch unser Label ist so ein Fenster. Aus dem Grund schauen wir uns an dieser Stelle die Definition von "CreateWindowEx" an:
HWND CreateWindowEx( DWORD dwExStyle, // extended window style LPCTSTR lpClassName, // pointer to registered name LPCTSTR lpWindowName, // pointer to window name DWORD dwStyle, // window style int x, // horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle to parent or owner window HMENU hMenu, // handle to menu, or child-window identifier HINSTANCE hInstance, // handle to application instance LPVOID lpParam // pointer to window-creation data );
Wir benötigen also:
Aber erzeugen wir erst einmal unser Fenster mit den Labels, und schauen wir uns dann an wo was im Code zu finden ist. Wie auch bei unserem Hauptfenster steht der erste Parameter für den erweiterten Fenster-Stil. Es bietet sich hier wieder an an mit verschiedenen Werten zu experimentieren und die Ergebnisse zu beobachten.
hwndLabel1 := CreateWindowEx(0,
Der zweite Parameter ist ein Zeiger auf die registrierte Fensterklasse, die letztlich für das verantwortlich ist, was wir mit dem Aufruf erzeugen (wollen), ob nun Schaltfläche, Editfeld oder eben Label ... Näheres findet man im MSDN unter dem Stichwort "CreateWindow".
'STATIC',
Der dritte Parameter ist augenscheinlich unser Text, den wir anzeigen wollen.
'Label mit Systemschrift',
Der vierte Parameter bestimmt in diesem Fall das Aussehen unseres Labels, wobei zu bemerken ist, dass jede registrierte Fensterklasse noch ihre zusätzlichen Stile hat. Der Text unseres Labels kann etwa mit der Eigenschaft SS_CENTER zentriert werden. Nähere Informationen gibt es dazu natürlich auch im MSDN.
Wichtig ist aber die Eigenschaft WS_CHILD, mit der Windows weiß, dass unser Label ein untergeordnetes Fenster ist. Und um es auch gleich sichtbar zu machen, sollten wir WS_VISIBLE nicht vergessen.
WS_VISIBLE or WS_CHILD,
Die nächsten vier Parameter bestimmen natürlich wieder Ursprungskoordinaten sowie Länge und Breite unseres Labels. Diese Angaben beziehen sich auf die linke obere Ecke unseres Hauptfensters.
15, 25, 160, 20,
Das Handle dieses Fensters geben wir auch gleich als nächsten Parameter an. Die Nachrichtenfunktion "WndProc" enthält in ihren Parametern das gültige Handle unseres Fensters, so dass wir es hier verwenden können.
hWnd,
Der zehnte Parameter definiert normalerweise das Menü unseres Fensters. Da wir es aber hier mit einem untergeordneten (Child-)Fenster zu tun haben, geben wir stattdessen einen eindeutigen Bezeichner an, der unser Label identifiziert. Auf diese Weise können Nachrichten später eindeutig zugeordnet werden, und wir haben die Möglichkeit, z.B. den Text unseres Labels zu ändern. Sie sollten für solche Zwecke Konstanten definieren (wie im Beispiel "IDC_LABEL1"), die Sie im ganzen Programm verwenden können. Eine mögliche Änderung des Wertes bringt dann nicht Ihr ganzes Programm durcheinander.
IDC_LABEl1,
Der elfte Parameter erhält das Handle auf unsere Anwendungsinstanz. In der Regel ist das der Wert der Fensterklassen-Eigenschaft "wc.hInstance", kurz: hier also
hInstance,
Den letzten Parameter können wir hier ignorieren und setzen ihn daher auf nil.
nil);
Unter den Beispielprogrammen finden Sie mit "panels.dpr" die Demonstration einiger spezieller Stile. So werden bspw. die VCL-Komponenten TPanel und TBevel nachgebildet.