Die Schriftart ändern


Unser Editor benutzt bisher beim Start die Systemschrift zur Anzeige. Dazu gehen wir einen etwas umständlichen Weg, der aber seine Berechtigung hat. Normalerweise würde folgender Aufruf genügen

mf := GetStockObject(SYSTEM_FONT);
if(mf <> 0) then
  SendMessage(hEdit, WM_SETFONT, mf, 1);

um die Systemschrift zu ermitteln und dem Textfeld zuzuordnen. Wir wollen aber später, dass der Schriftartendialog die bereits aktive Schrift auch anzeigt. Ich möchte nicht zu weit vorgreifen, aber dazu ist eine Variable vom Typ TLogFont erforderlich, die an den Dialog übergeben werden kann.
Mit Hilfe der GDI-Funktion "GetObject" ist es möglich, die Eigenschaften der Systemschrift in das für uns relevante TLogFont-Record kopieren zu lassen

if(GetObject(GetStockObject(SYSTEM_FONT),sizeof(lf),@lf) =
  sizeof(lf)) then
begin

Der erste Parameter ist der schon eingangs gezeigte Befehl "GetStockObject", der uns die Systemschriftart zurückliefert. Der zweite Parameter ist die Größe des TLogFont-Records, der dritte Parameter ist ein Zeiger auf eben dieses Record. Wenn die Funktion erfolgreich war, dann liefert sie die Anzahl der kopierten Bytes zurück, die in diesem Fall also der Recordgröße entsprechen muss.
Nun müssen wir allerdings einen, für das Textfeld verwertbaren Font erzeugen. Dazu benutzen wir die Funktion "CreateFontIndirect", der wir das eben gefüllte TLogFont-Record übergeben:

  mf := CreateFontIndirect(lf);
  if(mf <> 0) then
    SendMessage(hEdit,WM_SETFONT,WPARAM(mf),LPARAM(false));
end;

Wie gesagt, im Erfolgsfall zeigt das Textfeld nun die Systemschriftart an, und wenn Sie den Schriftartendialog aufrufen, dann sollte die Systemschrift auch voreingestellt sein.