type
TLogFontA = packed record
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;
TLogicFont用法:
procedure SetLogicFont(ACanvas: TCanvas;W: Integer = 0;H: Integer = 0);
var LogicFont: TLogFont;
begin
with LogicFont,ACanvas.Font do
begin
if H = 0 then lfHeight := Height
else lfHeight := H;
lfWidth := W;
lfEscapement := 10*Direction;
lfOrientation := 10*Direction;
lfWeight := FW_NORMAL;//FW_BOLD;
lfItalic := BYTE(fsItalic in Style);
lfUnderline := BYTE(fsUnderline in Style);
lfStrikeOut := BYTE(fsStrikeOut in Style);
lfCharSet := Charset;
lfOutPrecision := OUT_TT_PRECIS;
lfClipPrecision := CLIP_DEFAULT_PRECIS;
lfQuality := DEFAULT_QUALITY;
lfPitchAndFamily := DEFAULT_PITCH or FF_DONTCARE;
StrCopy(lfFaceName,PChar(Name));
end;
ACanvas.Font.Handle := Windows.CreateFontIndirect(LogicFont);
end;
本文转自 byteh 51CTO博客,原文链接:http://blog.51cto.com/byteh/86970,如需转载请自行联系原作者