摘自《家庭电脑世界》2000年第12期,你可以根据需要自行改动。
新建一个Delphi工程,在窗体上加入一个TButton控件,双击Button1,完成如下代码:
procedure TForm1.Button1Click(Sender: TObject);
var
r:string;
LogFont:TLogFont;
NewFont,OldFont:THandle;
begin
SetBkMode(Canvas.Handle,Transparent);
LogFont.lfHeight :=60;
{lfHeight指定以逻辑单位标定的字体高度,取值可为正
负或零,对于需要随意定义字体高度的情况下通常取负值,以保证获得实际尺寸的字体。}
LogFont.lfWidth :=30;
{lfWidth用于指定字体的平均宽度,由于Windows系统下
的大多数字体都是比例字体因而采用平均宽度这个表示方法。若指定为0,则系统会自动根
据适当的比例自动处理宽度。}
LogFont.lfEscapement :=400;
{指定输出方向与当前坐标系X轴之间的以十分之一
度为单位的角度,这里就是40度了。}
LogFont.lfWeight :=0;
LogFont.lfItalic :=0;
LogFont.lfUnderline :=0;
LogFont.lfStrikeOut :=0;
LogFont.lfCharSet :=DEFAULT_CHARSET;
r :='宋体'#0;
move(r[1],LogFont.lfFaceName[0],length(r)+1);
NewFont :=CreateFontIndirect(LogFont);
OldFont :=SelectObject(Canvas.Handle,NewFont);
Canvas.TextOut(10,200,'测试字体');{输出内容是“测试字体”}
SelectObject(Canvas.Handle,OldFont);{用完以后还要还原字体}
DeleteObject(NewFont);
end;
Windows的逻辑字体(LogFont)可以使用CreateFont或CreateFontIndirect这两个
Windows API函数来定义任何想要的字体,由于CreateFont所需的参数太多通常我们使用
CreateFontIndirect来建立所需的逻辑字体,这个API函数在Delphi中的声明为
function CreateFontIndirect(const p1: TLogFont): HFONT;
stdcall;
在
Delphi 4 的Windows.pas中TLogFont的定义在第12407开始。对于其中
lfItalic、lfUnderline、lfStrikeOut的值,如果非0则分别表示采用斜体字、加上下
划线、加上删除线,反之则用正常字体。