Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

CTPAX-X _ Программы _ Временное отключение Cleartype

Автор: Grom PE Apr 3 2008, 09:57

Большую часть времени у меня включено сглаживание шрифтов (Cleartype), на моем экране так лучше виден текст.
Но бывают ситуации, когда Cleartype вреден. Например, при снятии скриншотов его лучше отключить.
Я заметил, что экранная лупа (magnify.exe) отключает его на время своего запуска, и решил добиться такого же эффекта.
В результате получился такой код на Delphi:

CODE
uses Windows;

//const // Uncomment this if you're using Delphi 6 or earlier
//  FE_FONTSMOOTHINGSTANDARD = $0001;
//  FE_FONTSMOOTHINGCLEARTYPE = $0002;
//  SPI_GETFONTSMOOTHINGTYPE = $200A;
//  SPI_SETFONTSMOOTHINGTYPE = $200B;

const
  SysParamFlags=SPIF_SENDWININICHANGE or SPIF_UPDATEINIFILE;
  RedrawFlags=RDW_INVALIDATE or RDW_ERASE or RDW_ALLCHILDREN
    or RDW_UPDATENOW or RDW_ERASENOW;
var
  SmoothingType:cardinal;
  WasCleartype:boolean;
begin
  SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE,0,@SmoothingType,0);
  WasCleartype:=SmoothingType=FE_FONTSMOOTHINGCLEARTYPE;
  if WasCleartype then
  begin
    SystemParametersInfo(SPI_SETFONTSMOOTHINGTYPE,0,
      pointer(FE_FONTSMOOTHINGSTANDARD),SysParamFlags);
    RedrawWindow(0,nil,0,RedrawFlags);
  end;
  // Make screenshot, etc.
  MessageBox(0,'Cleartype is disabled at this point...','Test',0);
  // Restore Cleartype state
  if WasCleartype then
  begin
    SystemParametersInfo(SPI_SETFONTSMOOTHINGTYPE,0,
      pointer(FE_FONTSMOOTHINGCLEARTYPE),SysParamFlags);
    RedrawWindow(0,nil,0,RedrawFlags);
  end;
end.
Естественно, для версий Windows ниже XP этот код не нужен, и не будет работать.