zoukankan      html  css  js  c++  java
  • GdiPlus[24]: IGPPrivateFontCollection: 分别从文件和内存加载字体


    IGPPrivateFontCollection.AddFontFile: 从文件加载字体;

    IGPPrivateFontCollection.AddMemoryFont: 从内存加载字体

    AddFontFile 测试:

    uses GdiPlus;
    
    function GetFontsDirectory: string;
    var
      Len: Integer;
      buf: array[0..MAX_PATH-1] of Char;
    begin
      GetWindowsDirectory(buf, Length(buf));
      Result := buf + '\Fonts\';
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      FontCollection: IGPPrivateFontCollection;
      FontFamily: IGPFontFamily;
      Font: IGPFont;
      Graphics: IGPGraphics;
      Brush: IGPSolidBrush;
      Point: TGPPointF;
    begin
      FontCollection := TGPPrivateFontCollection.Create;
      FontCollection.AddFontFile(GetFontsDirectory + 'msyh.ttf');   //微软雅黑
      FontCollection.AddFontFile(GetFontsDirectory + 'simhei.ttf'); //黑体
      FontCollection.AddFontFile(GetFontsDirectory + 'SIMLI.TTF');  //隶书
      FontCollection.AddFontFile(GetFontsDirectory + 'simkai.ttf'); //楷体 GB2312
    
      Graphics := TGPGraphics.Create(Handle);
      Brush := TGPSolidBrush.Create(TGPColor.Red);
      Point.Initialize(10, 10);
      for FontFamily in FontCollection.Families do
      begin
        Font := TGPFont.Create(FontFamily, 16, FontStyleRegular, UnitPixel);
        Graphics.DrawString(FontFamily.FamilyName, Font, Point, Brush);
        Point.Y := Point.Y + Font.GetHeight(0); //参数是 0 或 nil 时, 字体建立是必须指定 UnitPixel
      end;
    end;
    

    AddMemoryFont 测试:

    uses GdiPlus;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Stream: TMemoryStream;
      FontCollection: IGPPrivateFontCollection;
      FontFamily: IGPFontFamily;
      Font: IGPFont;
      Graphics: IGPGraphics;
      Brush: IGPSolidBrush;
      Point: TGPPointF;
    begin
      Stream := TMemoryStream.Create;
      Stream.LoadFromFile('C:\Windows\Fonts\msyhbd.ttf');
    
      FontCollection := TGPPrivateFontCollection.Create;
      FontCollection.AddMemoryFont(Stream.Memory, Stream.Size);
      FontFamily := FontCollection.Families[0];
    
      Font := TGPFont.Create(FontFamily.FamilyName, 24);
      Brush := TGPSolidBrush.Create(TGPColor.Create(0, 0, 0));
      Point.Initialize(10, 10);
      Graphics := TGPGraphics.Create(Handle);
    
      Graphics.DrawString(FontFamily.FamilyName, Font, Point, Brush);
    
      Stream.Free;
    end;
    

  • 相关阅读:
    简化SpringBoot框架打包体积
    深究1.8版本HashMap源码
    一次面试题,将 字符串 保存在 Byte 数组中
    记一次linux磁盘清理
    Alibaba Cloud Toolkit 使用心得(IDEA版)
    Mybatis 一对多分页踩坑 对collection的分析
    MySQL中update修改数据与原数据相同会再次执行吗?
    与 MySQL 因“CST” 时区协商误解导致时间差了13 小时
    Druid数据源
    mybatis自动生成代码 mybatis-generator
  • 原文地址:https://www.cnblogs.com/del/p/1624924.html
Copyright © 2011-2022 走看看