文档章节

WinAPI: CreateFontIndirect - 根据字体结构建立逻辑字体

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 608
阅读 6
收藏 0
//声明:
CreateFontIndirect(
  const p1: TLogFont {字体结构}
): HFONT;            {返回新字体指针}

//TLogFont 是 tagLOGFONTA 结构的重定义:
tagLOGFONTA = packed record
  lfHeight: Longint;      {字体高度}
  lfWidth: Longint;       {字体平均宽度}
  lfEscapement: Longint;  {角度, 单位是 1/10 度}
  lfOrientation: Longint; {基线角度}
  lfWeight: Longint;      {粗体, 取值: 0-1000}
  lfItalic: Byte;         {斜体}
  lfUnderline: Byte;      {下划线}
  lfStrikeOut: Byte;      {删除线}
  lfCharSet: Byte;        {字符集}
  lfOutPrecision: Byte;   {输出精度}
  lfClipPrecision: Byte;  {剪裁精度}
  lfQuality: Byte;        {输出质量}
  lfPitchAndFamily: Byte; {间距及字族}
  lfFaceName: array[0..LF_FACESIZE - 1] of AnsiChar; {字样名称}
end;

 
 
 
 
 

 

 

  
//例1: procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var FontInfo: TLogFont; {声明字体结构} FH1,FH2: HFONT; {声明字体句柄} const str = '万一的 Delphi 博客'; begin {定义字体特征} FontInfo.lfHeight := 0; {赋值 0, 系统自动给一个值} FontInfo.lfWidth := 0; {赋值 0, 系统自动给一个值} FontInfo.lfEscapement := 0; {无角度} FontInfo.lfWeight := 500; {中等加粗} FontInfo.lfItalic := 0; {非斜体} FontInfo.lfUnderline := 0; {无下划线} FontInfo.lfStrikeOut := 0; {无删除线} FontInfo.lfFaceName := '宋体'; FH1 := CreateFontIndirect(FontInfo); FH2 := SelectObject(Canvas.Handle, FH1); {用 CreateFontIndirect 建立逻辑字体; 用 SelectObject 选人设备; 并返回字体句柄} TextOut(Canvas.Handle, X, Y, str, Length(str)); DeleteObject(FH1); DeleteObject(FH2); end;
//效果图:

//例2: 扁字
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  FontInfo: TLogFont; 
  FH1,FH2: HFONT; 
const
  str = '万一的 Delphi 博客';
begin
  FontInfo.lfHeight := 0;     
  FontInfo.lfWidth := 12;     {只修改了此处} 
  FontInfo.lfEscapement := 0; 
  FontInfo.lfWeight := 500;   
  FontInfo.lfItalic := 0;     
  FontInfo.lfUnderline := 0;  
  FontInfo.lfStrikeOut := 0;  
  FontInfo.lfFaceName := '宋体';
  
  FH1 := CreateFontIndirect(FontInfo);
  FH2 := SelectObject(Canvas.Handle, FH1);

  TextOut(Canvas.Handle, X, Y, str, Length(str));

  DeleteObject(FH1);
  DeleteObject(FH2);
end;

 
 
 
 
 

 

 

  
//效果图:

//例3: 长字
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  FontInfo: TLogFont; 
  FH1,FH2: HFONT;   
const
  str = '万一的 Delphi 博客';
begin
  FontInfo.lfHeight := 32;    {修改了此处}  
  FontInfo.lfWidth := 12;     
  FontInfo.lfEscapement := 0; 
  FontInfo.lfWeight := 500;   
  FontInfo.lfItalic := 0;     
  FontInfo.lfUnderline := 0;  
  FontInfo.lfStrikeOut := 0;  
  FontInfo.lfFaceName := '宋体';
  
  FH1 := CreateFontIndirect(FontInfo);
  FH2 := SelectObject(Canvas.Handle, FH1);

  TextOut(Canvas.Handle, X, Y, str, Length(str));

  DeleteObject(FH1);
  DeleteObject(FH2);
end;

 
 
 
 
 

 

 

  
//效果图:

//例4: 旋转
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  FontInfo: TLogFont; 
  FH1,FH2: HFONT;       
const
  str = '万一的 Delphi 博客';
begin
  FontInfo.lfHeight := 0;      
  FontInfo.lfWidth := 0;     
  FontInfo.lfEscapement := 450; {修改了此处}
  FontInfo.lfWeight := 500;   
  FontInfo.lfItalic := 0;     
  FontInfo.lfUnderline := 0;  
  FontInfo.lfStrikeOut := 0;  
  FontInfo.lfFaceName := '宋体';
  
  FH1 := CreateFontIndirect(FontInfo);
  FH2 := SelectObject(Canvas.Handle, FH1);

  TextOut(Canvas.Handle, X, Y, str, Length(str));

  DeleteObject(FH1);
  DeleteObject(FH2);
end;

 
 
 
 
 

 

 

  
//效果图:

//一个利用角度的示例:
procedure TForm1.FormPaint(Sender: TObject);
var
  FontInfo: TLogFont; 
  FH1,FH2: HFONT; 
  x,y,i: Integer;
const
  str = '万一的 Delphi 博客';
begin
  FontInfo.lfHeight := 0; 
  FontInfo.lfWidth := 0;     
  FontInfo.lfEscapement := 0; 
  FontInfo.lfWeight := 1000;   
  FontInfo.lfItalic := 0;     
  FontInfo.lfUnderline := 0;  
  FontInfo.lfStrikeOut := 0;  
  FontInfo.lfFaceName := '宋体';

  x := ClientWidth div 2;
  y := ClientHeight div 2;

  SetBkMode(Canvas.Handle, TRANSPARENT);

  i := 0;
  while i<360 do
  begin
    FontInfo.lfEscapement := i * 10;
    FH1 := CreateFontIndirect(FontInfo);
    FH2 := SelectObject(Canvas.Handle, FH1);
    TextOut(Canvas.Handle, X, Y, str, Length(str));
    Inc(i,10);
  end;
 
  DeleteObject(FH1);
  DeleteObject(FH2);
end;

 
 
 
 
 

 

 

  
//效果图:

本文转载自:http://www.cnblogs.com/del/archive/2008/02/09/1066288.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
《Windows核心编程》の“字体”和“颜色”对话框

《Windows核心编程》の“字体”和“颜色”对话框 “字体”通用对话框列出了系统中安装的字体,用户可以在上面选择字体名称,同时可以选择字体大小、颜色,以及一些效果如斜线、粗体、删除线或...

IMGTN
2012/07/07
0
0
Delphi利用Windows GDI实现文字倾斜

procedure TForm1.FormPaint(Sender: TObject); var FLogFont: tagLogFontW; hTempFont, hPrevFont: HFONT; //字体句柄 hTempDC: HDC; //设备描述表或图形设备句柄 TempString: string; //输......

vga
2014/05/03
0
1
Win32多语言IME应用程序编程接口(API)

十三、IMM函数 1、IMM用户界面函数 以下是用户界面窗口可以使用的输入法管理器函数。应用程序也可以使用它们改变输入法的状态。 ImmGetCompositionWindow ImmSetCompositionWindow ImmGetCa...

yousss
04/25
0
0
将影响添加到类型驱动的项目

  在类型驱动的设计中,使用不同类型的尺寸,重量和颜色进行影响并创建层次结构。      在使用类型驱动的项目时,在设计中创建一个明确的层次结构是非常重要的,同时在所有正确的位置添...

爱码农
01/01
0
0
全局替换字体,开源库更方便!!!

序 在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究。 那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以...

承香墨影
2017/10/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
12
1
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部