WinAPI: CreateFontIndirect - 根据字体结构建立逻辑字体
为什么80%的码农都做不了架构师?>>>
//声明:
CreateFontIndirect(const p1: TLogFont {字体结构}
): HFONT; {返回新字体指针}//TLogFont 是 tagLOGFONTA 结构的重定义:
tagLOGFONTA = packed recordlfHeight: 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);
varFontInfo: TLogFont; {声明字体结构}FH1,FH2: HFONT; {声明字体句柄}
conststr = '万一的 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);
varFontInfo: TLogFont; FH1,FH2: HFONT;
conststr = '万一的 Delphi 博客';
beginFontInfo.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);
varFontInfo: TLogFont; FH1,FH2: HFONT;
conststr = '万一的 Delphi 博客';
beginFontInfo.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);
varFontInfo: TLogFont; FH1,FH2: HFONT;
conststr = '万一的 Delphi 博客';
beginFontInfo.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);
varFontInfo: TLogFont; FH1,FH2: HFONT; x,y,i: Integer;
conststr = '万一的 Delphi 博客';
beginFontInfo.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 dobeginFontInfo.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;//效果图:
转载于:https://my.oschina.net/hermer/blog/320138
WinAPI: CreateFontIndirect - 根据字体结构建立逻辑字体相关推荐
- 17.3 逻辑字体
摘录于<Windows程序(第5版,珍藏版).CHarles.Petzold 著>P778 现在我们已经理解了逻辑英寸和逻辑缇的概念,让我们开始讨论逻辑字体. 一个逻辑字体是一个 GDI ...
- Windows字体结构LOGFONT
LOGFONT是Windows内部字体的逻辑结构,主要用于设置字体格式,其定义如下: typedef struct tagLOGFONTA{LONG lfHeight;LONG lfWidth;LON ...
- windows的字体结构 LOGFONT
在Windows内部,字体是以一个名为LOGFONT的结构来表示 结构体原型: typedef struct tagLOGFONT { LONG lfHeight; //以逻辑单位指定字体字符元 ...
- 关于TrueType字体结构的文章
转载链接: http://www.zhaozi.cn/e/DoPrint/?classid=94&id=45 TrueType字体通常包含在单个TrueType字体文件中,其文件后缀为. ...
- [转]TrueType字体结构
TrueType字体通常包含在单个TrueType字体文件中,其文件后缀为.TTF. OpenType字体是以类似于TrueType字体的格式编码的POSTSCRIPT字体.OPENTYPE字体使用. ...
- 字体信息 TEXTMETRIC 字体结构 GLYPHMETRICS
tmHeight指字符高度(不包括两行字符之间的间距),tmAscent表示字符基线以上部分的高度,tmDescent表示字符基线以下部分的高度. tmInternalLeading表示字符内预留的间 ...
- 网站设计分析:banner中的字体结构
对于我们通常所看到的网站banner,它的本身形状决定了其固定的构成方式一般为矩形,横幅,左右结构和居中,它的文字特点是主题式,一般分为主标题和副标题,文字较多,设计的时候还需要考虑应用到网站各种尺寸 ...
- (整理)HTML字体标记:标题字体,字体大小,物理字体,逻辑字体,字体颜色,客户端字体,字符实体
HTML字体标记 HTML字体标记包括:标题字体,字体大小,物理字体,逻辑字体,字体颜色,客户端字体,字符实体等. 1.标题字体: <h#&g ...
- HTML中的物理字体与逻辑字体
物理字体指定文本的"样式"(如粗.斜.下划线): 逻辑字体指定文本的"作用"(如强调.缩小.放大). 转载于:https://www.cnblogs.com/z ...
最新文章
- (C++)小明种苹果(续)
- R语言使用pwr包的pwr.chisq.test函数对卡方检验进行效用分析(power analysis)、在已知效应量(effect size)、显著性水平、效用值的情况下计算需要的样本量
- 测试tcp连接数工具_后端开发程序员不知道压力测试怎么能行
- mybatis3 中 @Provider 的使用方式
- 怎么从gitlab上下载别人的代码
- Leetcode算法题(C语言)13--反转字符串
- TEMU:动态分析组件
- Python基础----Matplotlib_新增
- 用 Python 检验数据正态分布的几种方法
- mips指令分类和寻址大全
- java B2B2C Springboot多租户电子商城系统-Spring Cloud Stream(消息驱动)
- MVCC常问面试题(面试重点)
- 如何通过W3school学习JS/如何使用W3school的JS参考手册
- T6 v6.2puls1 安装了最新补丁之后采购发票结算之后入库单价税合计有1分差额
- 无人机倾斜摄影技术应用(文末附作业指导书)
- VmWare中虚拟机桥接无线网卡使用静态ip
- 《指弹:HARD RAIN》
- 【其他】【RQNOJ】吉祥数
- 语法俱乐部3:动词时态
- 数字SOC设计之低功耗设计入门(二)——功耗的分析
热门文章
- 如何处理“已超出域所允许创建计算机账户的最大值”
- Java类和对象的初始化顺序
- pyspark 核心概念
- Python进程和线程保姆式教学,1个台机子多只手干活的秘籍
- java并行任务dispatch_Java模拟 双分派Double Dispatch
- python5_python5
- python计时函数_python计时函数
- linux 在硬盘中创建文件系统,linux mkfs命令创建Linux文件系统
- HDU1042(高精度模拟乘法)
- 点分治问题 ----------- HDU4812 D Tree [点分治 + 乘法逆元]