Это означает, что переменная разыменовывается дважды. Предположим, у вас есть указатель на указатель на символ, например:
char ** variable = ...;
Если вы хотите получить доступ к значению, на которое указывает указатель, вы должны разыменовываем его дважды:
** переменная
Вы можете обманом заставить VCL создать свой собственный класс, унаследованный от TLabel
. Это проверочный код, протестированный с помощью Delphi 4.
Создайте новый модуль для своего собственного класса TLabel
:
unit AntiAliasedLabel;
interface
uses
Windows, Messages, SysUtils, Controls, StdCtrls, Graphics;
type
TLabel = class(StdCtrls.TLabel)
private
fFontChanged: boolean;
public
procedure Paint; override;
end;
implementation
procedure TLabel.Paint;
var
LF: TLogFont;
begin
if not fFontChanged then begin
Win32Check(GetObject(Font.Handle, SizeOf(TLogFont), @LF) <> 0);
LF.lfQuality := ANTIALIASED_QUALITY;
Font.Handle := CreateFontIndirect(LF);
fFontChanged := TRUE;
end;
inherited;
end;
end.
Теперь измените модуль формы который содержит метку, добавляя модуль AntiAliasedLabel
после StdCtrls
. В результате создается ваш собственный класс AntiAliasedLabel.TLabel
, где обычно создается StdCtrls.TLabel
.
IMHO, VCL должен проверять сглаживание шрифтов по умолчанию в системе и применяя это как значение по умолчанию во время выполнения. Если нет, по крайней мере, по умолчанию должно быть выбрано более разумное сглаживание. В этом случае можно было бы возразить, что ClearType будет лучшим вариантом по умолчанию, учитывая, что> 50% мониторов в наши дни являются ЖК-дисплеями (и более 50% компьютеров работают под управлением XP или лучше).
Это общепризнанный способ взлома (и, как отмечает Кен Уайт, не лучший подход, если есть альтернативы), но мне нужен был способ исправить это глобально для форм, содержащих буквально сотни типов сторонних компонентов (что делало наследование компонентов нереалистичным ).
Я изменил качество шрифта по умолчанию в Graphics.pas, TFont.GetHandle следующим образом:
// lfQuality: = DEFAULT_QUALITY;
lfQuality: = 5; // (HACK) CLEARTYPE_QUALITY, принудительное использование cleartype
Самый простой способ - создать собственный компонент на основе TLabel, например TSmoothLabel или TAntiAliasedLabel, и добавить в него свой код сглаживания. Затем вы используете свой компонент вместо стандартного TLabel.