WinAPI: CreateFontIndirect - 根据字体结构建立逻辑字体
2008-02-09 15:08
330 查看
//声明: 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; //效果图:
相关文章推荐
- 【转】WinAPI: CreateFontIndirect - 根据字体结构建立逻辑字体
- WinAPI: CreatePenIndirect - 根据笔的参数结构建立画笔
- WinAPI: CreateBrushIndirect - 根据画刷结构建立画刷
- WinAPI: CreateDirectoryEx - 根据模版建立文件夹
- 创建字体CreateFont,CreateFontIndirect
- WinAPI: CreateEllipticRgn、CreateEllipticRgnIndirect - 建立椭圆区域
- 根据数据库的结构来推断他的逻辑功能
- MiniGUI 体系结构之三 逻辑字体以及多字体和多字符集实现
- div+css - 工具 - Microsoft Typography微软印刷技术 - WEFT 3网页嵌入字体3 - Wizard向导 - Create font objects创建字体对象
- 使用method swizzling实现根据屏幕尺寸自适应Font字体大小
- CreateFont比CreateFontIndirect好用啊~
- TensorFLow 基础 矩阵相乘相加 线性回归 手写字体逻辑回归 神经网络 tensorboard 显示 网络结构 和 优化记录
- 根据输入的带标号的广义表形式的字符序列,建立该树的孩子-兄弟链表储存结构
- WinAPI: CreatePolygonRgn - 建立多边形区域
- WinAPI: CreateSolidBrush - 建立实心画刷
- Windows CreateFont:创立本人的字体
- 请问如何在GDI+中实现TLOGFONT逻辑字体的任意设置???
- WinAPI: CreateHatchBrush - 建立阴影画刷
- MiniGUI 体系结构之三——逻辑字体以及多字体和多字符集实现
- Font 根据路径返回字体(TTF)