Tech Tipp #10: ClearType von Delphi aus/einschalten

Posted by on in Programming

Frage: Ich möchte (aus welchen Gründen auch immer) für den aktuell angemeldeten Benutzer das ClearType von Windows ausschalten. Wie geht das?

Antwort: ClearType lässt sich unter Windows 7/8/10 mittels ClearType-Textoptimierungs-Program (cctune.exe) über die Bordmittel von Windows ein- bzw ausschalten und konfigurieren:

Dabei handelt es sich um eine Pro-User-Einstellung. Microsoft selbst stellt dafür den WinAPI-Befehl SystemParametersInfo bereit; mittels passender Aktion kann man hier das ClearType Verhalten beeinflussen.

Quick-and-Dirty Lösung (bitte weiter lesen!):

Ausschalten:

  SystemParametersInfo(SPI_SETFONTSMOOTHING,0,0,0);
  InvalidateRect(0, nil, True);

Einschalten:

  SystemParametersInfo(SPI_SETFONTSMOOTHING,1,0,0);
  InvalidateRect(0, nil, True);

Das jeweilige Absetzung von InvalidateRect(0, nil, True); erzeugt dabei einen kompletten Screen-Refresh....

Die Original-Paramter sind

BOOL WINAPI SystemParametersInfo(
  _In_    UINT  uiAction,
  _In_    UINT  uiParam,
  _Inout_ PVOID pvParam,
  _In_    UINT  fWinIni
);

Man kann, sollte das etwas besser gestalten

Einschalten:

  SystemParametersInfo(SPI_SETFONTSMOOTHING, Cardinal(true), 0, SPIF_UPDATEINIFILE OR SPIF_SENDCHANGE);
  SystemParametersInfo(SPI_SETFONTSMOOTHINGTYPE, FE_FONTSMOOTHINGCLEARTYPE, 0, SPIF_UPDATEINIFILE OR SPIF_SENDCHANGE);

Ausschalten:

  SystemParametersInfo(SPI_SETFONTSMOOTHING, Cardinal(false), 0, SPIF_UPDATEINIFILE OR SPIF_SENDCHANGE);

Dadurch erreicht man beim Einschalten vier Dinge:

  • Cardinaltype wird richtig/leserlicher gesetzt
  • Durch SPIF_UPDATEINIFILE wird das auch persistent in der Windows-Umgebung gespeichert
  • Durch SPIF_SENDCHANGE wird auch gleich die Message zur Aktualisierung der Oberfläche gesendet (ein InvalidateRect ist nicht mehr nötig)
  • Durch eine zusätzliche "Action" SPI_SETFONTSMOOTHINGTYPE wird der Type des ClearType gesetzt (siehe MSDN-Doku-Link weiter oben)

Beim Ausschalten erreicht man nur bessere/konformere Lesbarkeit und das senden der Window-Message zur Aktualisierung.

 

 



Comments

Check out more tips and tricks in this development video: