3

Delphi(5 Enterprise)に付属の例に基づいて、カスタムゲージを使用しています。知らない人にとっては、スムーズなプログレスバーのようなものですが、コンポーネントの中央(垂直方向と水平方向)にパーセンテージまたは値が表示されます。

ゲージがいっぱいになったときと空のときの両方でテキストが読みやすくなるように、テキストは反転した色で表示されます。

フォントのアンチエイリアシングを使用すると、これらの反転した色によってフォントのエッジが非常にクレイジーな色で表示され、コンポーネントの外観が損なわれます。

この1つのコンポーネントだけでフォントスムージング/アンチエイリアシングを無効にする方法、または無効にしてテキストを描画してから再度有効にする方法はありますか?

現在の回避策は、「MS Sans Serif」のように滑らかにならないフォントを使用することですが、一貫性を保つために、他のUIと同じフォントを使用したいと思います。

4

1 に答える 1

13

構造体で指定NONANTIALIASED_QUALITYすると、LOGFONTアンチエイリアスがオフになります。

procedure SetFontQuality(Font: TFont; Quality: Byte);
var
  LogFont: TLogFont;
begin
  if GetObject(Font.Handle, SizeOf(TLogFont), @LogFont) = 0 then
    RaiseLastOSError;
  LogFont.lfQuality := Quality;
  Font.Handle := CreateFontIndirect(LogFont);
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
const
  FontQualities: array[Boolean] of Byte = (DEFAULT_QUALITY, NONANTIALIASED_QUALITY);
var
  Canvas: TCanvas;
begin
  Canvas := (Sender as TPaintBox).Canvas;
  SetFontQuality(Canvas.Font, FontQualities[CheckBox1.Checked]);
  Canvas.TextOut(12, 12, 'Hello, world!');
end;
于 2010-09-15T11:14:44.740 に答える