首页 | 新闻 | 体育 | 军事 | 教育 | 娱乐 | 汽车博览 | 风景名胜 | 人才招聘 | 供求信息
政府 | 经济 | 企业 | 电脑 | 健康 | 餐饮 | 保险专栏 | 搜索引擎 | 网站登录 | 房 地 产
电 脑 频 道 频道首页  硬件资讯  网络纵横  数码时代  安全专区  网络学院
搜 索


 
  当代徐州  >>>  电脑频道  >>>  网络学院  >>>  编程指南  >>>  正文
如何用Delphi6编程 让文本“动起来”
2002年12月11日 13:46
  Delphi是具有可视化界面的面向对象编程语言,它以其功能强大、简便易用等诸多特性深受编程人员的喜爱。在Delphi 6程序中输出文字时,文字一般是水平或垂直的,虽然可以很容易地改变文字的字体、字号、颜色,但要输出带任意倾斜度的文字以达到特殊的显示效果就有点困难了。

  Win32 API即为Windows应用编程接口(Application Programming Interface),所有在Win32平台上运行的应用程序都可以调用这些函数,所以通过调用Win32 API函数可以实现输出文字的特殊显示操作。

  ★实例要求

  在窗体的下部有一个按钮,单击按钮后,窗体中间输出一行文字,如:“中国电脑教育报”,输出的文字在窗体的中间顺时针旋转。

  ★重要API函数

  将指定的对象选入给定的设备描述表。

  function SelectObject(DC:HDC;p2:HGDIOBJ):HGDIOBJ;stdcall;

  使用LogFont结构创建一种逻辑字体。

  function CreateFontIndirect(const P1:TLogFont):HFont;stdcall;

  用当前字体把一个字符串写到指定位置。

  function TextOut(DC: HDC; X, Y: Integer; Str: PChar; Count: Integer): BOOL; stdcall;

  从内存中删除一个对象(本文指逻辑字体)。

  function DeleteObject(p1: HGDIOBJ): 

  BOOL; stdcall;

  ★字体结构

  TLogfont结构是实现文字特殊显示的关键,Windows将根据结构中的内容创建出相应的逻辑字体,在Delphi的Windows.pas中定义的TLogFont结构如下:

  type

  TLogFontA = packed record

  lfHeight: Longint; 

  //以逻辑单位标定的字体高度,取值可为正负或零。

  lfWidth: Longint; 

  //字体的平均宽度,若指定为0,则系统会自动根据适当的比例自动处理宽度。

  lfEscapement: Longint; 

  //输出方向与当前坐标系X轴之间的以十分之一度为单位的角度。

  lfOrientation: Longint; 

  //每个字符与当前坐标系X轴之间的以十分之一度为单位的角度。在Windows 95中这个值等同于lfEscpement。

  lfWeight: Longint; 

  //范围为从0至1000的字体加重程度,400是标准字体,700是加重字体,0表示采用默认值。

  lfItalic: Byte; //不为0表示采用斜体字。

  lfUnderline: Byte; //不为0表示带下划线。

  lfStrikeOut: Byte; //不为0表示带删除线。

  lfCharSet: Byte; //指定字体集。

  lfOutPrecision: Byte; 

  //输出精度,用于确定对前面一些设定值的精确程度。

  lfClipPrecision: Byte; 

  //裁剪精度,就是去掉图形中落在视图以外的部分,有助于提高图形的处理速度。

  lfQuality: Byte; //指定输出质量。

  lfPitchAndFamily: Byte; //指定字体的Pitch和Family。

  lfFaceName: array[0..LF_FACESIZE - 1] of AnsiChar; 

   //指定采用的字体名称,且LF_FACESIZE=32。

  end;

  TLogFont =TLogFontA;

  注意在Windows环境下,每种字体具体输出为何种形式取决于很多因素,需要对以上这些参数进行有效的组合才能达到所要的效果。

  ★创作步骤

  在Delphi 6.0中,建立一个新的标准工程。

  在窗体下部添加一个Button按钮,将其Caption属性设为“开始旋转”。

  添加“开始旋转”按钮的事件处理过程代码:

  procedure TForm1.Button1Click(Sender: TObject);

  var

  i: integer;

  LogcalFnt:TLogFont;

  TempFont,NewFont:integer;

  DispStr:Pchar;

  begin

   LogcalFnt.lfHeight:=10;//字高

   LogcalFnt.lfWidth:=10;//字宽

   LogcalFnt.lfEscapement:=0;//倾斜度

   LogcalFnt.lfOrientation:=0;//方向与倾斜度取值相同

   LogcalFnt.lfWeight:=400;//字体笔画粗细程度

   LogcalFnt.lfItalic:=0;//没有斜体效果

   LogcalFnt.lfUnderline:=0;//没有下划线

   LogcalFnt.lfStrikeOut:=0;//没有删除线

   LogcalFnt.lfCharSet:=0;//默认字符集

   LogcalFnt.lfOutPrecision:=0;//系统默认值

   LogcalFnt.lfClipPrecision:=0;//系统默认值

   LogcalFnt.lfQuality:=0;//系统默认值

   LogcalFnt.lfPitchAndFamily:=0;//系统默认值

   LogcalFnt.lfFaceName:=Arial+Chr(0);//字体名称

   DispStr:=中国电脑教育报;

   i:=3600;

   while (i〉-1) do //自X轴正方向开始顺时针旋转

   begin

   LogcalFnt.lfEscapement:=i; //按一定的步长赋初值

   TempFont:=CreateFontIndirect(LogcalFnt); 

   //创建逻辑字体

   NewFont:=SelectObject(Form1.Canvas.Handle,TempFont); //取得当前字体,并替换为新字体

   TextOut(Form1.Canvas.Handle,form1.width div 2,form1.height div 2,sDispStr,length(DispStr)); 

   //在窗体中间为起点输出文字

   TempFont:=SelectObject(Form1.Canvas.Handle,NewFont); //还原替换的字体

   DeleteObject(TempFont); //删除逻辑字体

   i:=i-100; //旋转步长为10度

   end;

  end;

  注:以上代码在Windows me和Delphi 6中运行通过。

  结束语这是Windows的API函数使用的一个具体例子,希望能对广大读者起到抛砖引玉的作用,笔者对LongFont结构的详细说明,但愿读者能够触类旁通,利用Win32 API接口函数编写出更为丰富多彩的文字效果。




查看本文相关文章:文本  Delphi  
TOP