转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Delphi利用Windows GDI实现文字倾斜         ★★★★

Delphi利用Windows GDI实现文字倾斜

作者:闵涛 文章来源:闵涛的学习笔记 点击数:612 更新时间:2009/4/23 18:24:53

  一、引言

  在Delphi开发环境中,文字的输出效果一般都是头上脚下的"正统"字符,如何输出带有一定倾斜角度的文字以达到特殊的显示效果呢?笔者在制作公章辅助设计软件过程中,通过Windows图形设备接口函数实现了文字呈辐射状分布的功能。

  Windows图形设备接口(Graphics Device Interface)是Windows系统中的图形核心模块,以GDI.EXE形式提供给开发者使用。Windows中的图形基本上是由GDI.EXE中的函数来处理的,它的主要特点是在输出设备上支持与设备无关的图形。在GDI函数中,文本亦被视为一种图形对象,但并非简单的几何方式绘制,因为文本的输出涉及到字体。

  根据Windows中字体所用的技术可以分为3类字体:光栅字体,矢量字体和TrueType字体。其中,True Type字体的主要优点之一是可被任意放大或旋转,在任何尺寸上,都可以达到较为满意的显示效果,尤其,其允许在显示器和打印机上使用相同的字体。Windows为应用程序之所以能够提供设备无关性是通过采用让应用程序创建逻辑对象从而使用物理对象的方法实现的,同样,对于字体的使用也是一样的:应用程序在使用字体时,首先创建逻辑字体,以便Windows从设备中选择一种与之匹配的物理字体,从而达到较为准确的输出效果。

  使用Windows GDI函数实现文字的倾斜效果的基本步骤如下:

  1.取得设备描述表或图形设备的句柄:

   HDC GetDc(Thandle AWinHandle);

  2.创建逻辑字体并设置文字的倾斜度:

   HFont CreateFontIndirect(LogFont Far *Iplf),

   其中,Iplf为tagLogFont结构体,通过设置其lfEscapement可设置文字的倾斜度(为实际度数的10倍),例如:0度-正常字体,450度-左上45度倾斜,900度-正向左,等。

  3.将逻辑字体选入设备列表,从而,Windows选择与之匹配的物理字体,并且新的字体取代旧的字体:

   HGDIOBJ SelectObject(HDC hdc,HGDIOBJ hgdiobj);

   注:在此之前现

  4.使用当前设备的字体进行文字输出:

   BOOL TextOut(HDC hdc, int PosX, int PosY, LPCTSTR OutStr, int StrLength);

  5.释放不再使用的图形对象(这里为逻辑字体):

   BOOL DeleteObject(HGDIOBJ hObject);

  6.释放设备描述表或图形设备的句柄,函数声明如下:

   ReleaseDc(THandle AWinHandle,HDC Dc);

   注:上述过程要求在窗口的Paint事件中编写重新绘画或绘制文字的代码。

  二、程序实现

  在Delphi5.0中新建一个工程,在主窗体的Paint事件中编写如下代码:


 procedure TForm1.FormPaint(Sender: TObject);
  var
   FLogFont : tagLogFontA; file://逻辑字体--结构体类型
   hTempFont, hPrevFont: HFONT; file://字体句柄
   hTempDC: HDC; file://设备描述表或图形设备句柄
   TempString: string; file://输出的文字
  begin
   FLogFont.lfHeight := 10; file://字高
   FLogFont.lfWidth := 10; file://字宽
   FLogFont.lfWeight := 1; file://字体笔划粗细程度
   FLogFont.lfUnderline := 0; file://没有下划线
   FLogFont.lfStrikeOut := 0; file://没有删除线
   FLogFont.lfItalic := 0; file://斜体效果否
   FLogFont.lfCharSet := GB2312_CHARSET; file://字符集
   FLogfont.lfEscapement := 450; file://倾斜度
   FLogFont.lfOrientation := 450; file://方向与倾斜度取值同
   FLogFont.lfFaceName := '宋体'; file://字体名称
   file://创建逻辑字体
   hTempFont := CreateFontIndirect(FLogFont);
   TempString := '测试';
   file://取得窗口的设备句柄
   hTempDC := GetDC(Handle);
   file://取出窗口设备的当前字体,并替换为新字体
   hPrevFont := SelectObject(hTempDC, hTempFont);
   file://设置设备窗口的文字色彩
   SetTextColor(hTempDc, clRed);
   file://输出文字
   TextOut(hTempDc, 200 , 200, PChar(TempString), Length(TempString));
   file://恢复原有的字体
   SelectObject(hTempDc, hPrevFont);
   file://删除逻辑字体
   DeleteObject(hTempFont);
   file://释放设备接口
   ReleaseDC(Handle, hTempDC);
  end;

以上代码若不写在窗体的Paint事件,则当窗体接收到重绘消息时,默认的窗口绘制过程将重新绘制窗口而使倾斜文字消失。

  三、结束语

  以上,只是Windows GDI接口函数使用的一个具体例子,希望能对广大读者起到抛砖引玉的作用,利用Windows GDI接口函数编写出更为丰富多彩的的文字效果。


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台