手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

Delphi利用Windows GDI实现文字倾斜

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  一、引言

  在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接口函数编写出更为丰富多彩的的文字效果。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS