Автор: 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 этот код не нужен, и не будет работать.