GdiPlus[22]: IGPFont


测试效果图:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Brush: IGPSolidBrush;
  Pt: TGPPointF;
  Font: IGPFont;
begin
  Graphics := TGPGraphics.Create(Handle);
  Pt.Initialize(10, 10);
  Brush := TGPSolidBrush.Create($FFFF0000);

  Font := TGPFont.Create(Canvas.Handle);
  Graphics.DrawString('Self.Canvas.Font', Font, Pt, Brush);

  Graphics.TranslateTransform(0, Font.GetHeight(Graphics) * 1.5);
  Font := TGPFont.Create('微软雅黑', 12);
  Graphics.DrawString('''微软雅黑'', 12', Font, Pt, Brush);

  Graphics.TranslateTransform(0, Font.GetHeight(Graphics) * 1.5);
  Font := TGPFont.Create('微软雅黑', 12, [FontStyleBold]);
  Graphics.DrawString('''微软雅黑'', 12, [FontStyleBold]', Font, Pt, Brush);

  Graphics.TranslateTransform(0, Font.GetHeight(Graphics) * 1.5);
  Font := TGPFont.Create('微软雅黑', 12, [FontStyleItalic]);
  Graphics.DrawString('''微软雅黑'', 12, [FontStyleItalic]', Font, Pt, Brush);

  Graphics.TranslateTransform(0, Font.GetHeight(Graphics) * 1.5);
  Font := TGPFont.Create('微软雅黑', 12, [FontStyleUnderline]);
  Graphics.DrawString('''微软雅黑'', 12, [FontStyleUnderline]', Font, Pt, Brush);

  Graphics.TranslateTransform(0, Font.GetHeight(Graphics) * 1.5);
  Font := TGPFont.Create('微软雅黑', 12, [FontStyleStrikeout]);
  Graphics.DrawString('''微软雅黑'', 12, [FontStyleStrikeout]', Font, Pt, Brush);

  Graphics.TranslateTransform(0, Font.GetHeight(Graphics) * 1.5);
  Font := TGPFont.Create('微软雅黑', 12, FontStyleBoldItalic);
  Graphics.DrawString('''微软雅黑'', 12, FontStyleBoldItalic', Font, Pt, Brush);

  Graphics.TranslateTransform(0, Font.GetHeight(Graphics) * 1.5);
  Font := TGPFont.Create('微软雅黑', 12, FontStyleRegular, UnitPoint);
  Graphics.DrawString('''微软雅黑'', 12, FontStyleRegular, UnitPoint', Font, Pt, Brush);

  Graphics.TranslateTransform(0, Font.GetHeight(Graphics) * 1.5);
  Font := TGPFont.Create('微软雅黑', 12, FontStyleRegular, UnitPixel);
  Graphics.DrawString('''微软雅黑'', 12, FontStyleRegular, UnitPixel', Font, Pt, Brush);
end;


下面是一个关于 IGPFont 成员的测试:

var
  FontFamily: IGPFontFamily;
  Font,Font2: IGPFont;
  FontHight: Single;
  LogFont: TLogFontW;
begin
  FontFamily := TGPFontFamily.Create('宋体');
  Font := TGPFont.Create(FontFamily, 16, FontStyleBoldItalic, UnitPixel);
//  Font := TGPFont.Create(FontFamily, 16, [], UnitPixel);

  { Font.Size: 字号大小}
  ShowMessageFmt('FontSize: %f', [Font.Size]); //16.00

  { Font.Style: 字体样式 }
  if FontStyleBold in Font.Style then ShowMessage('Bold');
  if FontStyleItalic in Font.Style then ShowMessage('Italic');
  if FontStyleUnderline in Font.Style then ShowMessage('Underline');
  if FontStyleStrikeout in Font.Style then ShowMessage('Strikeout');
  if ((FontStyleBoldItalic * Font.Style) = FontStyleBoldItalic) then ShowMessage('Bold、Italic');
  if Font.Style = [] then ShowMessage('FontStyleRegular');

  { Font.MeasureUnit: 尺寸单位 }
  case Font.MeasureUnit of
    UnitWorld:      ShowMessage('World');
    UnitDisplay:    ShowMessage('Display');
    UnitPixel:      ShowMessage('Pixel');
    UnitPoint:      ShowMessage('Point');
    UnitInch:       ShowMessage('Inch');
    UnitDocument:   ShowMessage('Document');
    UnitMillimeter: ShowMessage('Millimeter');
  end;

  { Font.GetHeight: 字体高度 }
  FontHight := Font.GetHeight(TGPGraphics.Create(Handle));
//  FontHight := Font.GetHeight(nil);
//  FontHight := Font.GetHeight(0);
  ShowMessageFmt('FontHight: %f', [FontHight]); //18.25

  { Font.IsAvailable: 字体是否可用 }
  ShowMessage(BoolToStr(Font.IsAvailable, True));

  { Font.GetLogFontW: 获取 TLogFont 结构数据 }
  LogFont := Font.GetLogFontW(TGPGraphics.Create(Handle));
  ShowMessage(LogFont.lfFaceName);

  { Font.Family: 获取 IGPFontFamily }
  ShowMessage(Font.Family.FamilyName);

  { Font.Clone: 克隆 }
  Font2 := Font.Clone;
  ShowMessage(Font2.Family.FamilyName);
end;

原文地址:https://www.cnblogs.com/del/p/1624784.html