当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > Delphi > 基础教程 > 正文

Delphi利用Windows GDI实现文字倾斜

http://www.zk168.com.cn  招考学习网 2006-4-26 12:45:54
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--

 

 

  一、引言

  在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事件中编写重新绘画或绘制文字的代码。

  二、程序实现

  在Delphi中新建一个工程,在主窗体的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接口函数编写出更为丰富多彩的的文字效果。

-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·windows nt环境下fddi网卡驱动程序设计 2
·利用Delphi全面控制Windows任务栏
·在Windows中显示多幅彩色图像的技术
·Windows NT中的登记项及其完整性
·Windows下多串口的配置与使用
·windows nt环境下fddi网卡驱动程序设计
·用Windows终端仿真程序实现微机远程文件传送1
·用Borland C++3.1实现外设与Windows应用程序实时通信
·用Windows终端仿真程序实现微机远程文件传送
·Windows下多串口的配置与使用
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>