关于字间距问题!(20分)

  • 主题发起人 主题发起人 王鸣
  • 开始时间 开始时间

王鸣

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用 qrdbedit 从数据库中读数据进行显示,由于打印空间的限制, 要求 数据显示时
(全部是文本)为紧缩型,即字间距很小,我可以怎样处理?
 
已经有这么人浏览了,怎么没有人回答这个问题,这个问题不会很难吧!
如果你没看懂(即我没 写清楚)的话,你可以说啊。
---调整字间距。
顺祝大家 新年快乐!
 
我也好想知道,我是嫌太宽,我问了好多个网站,都不知所云,我愿为你加100分
 
首先为了达到这个功能,可以采用Windows的逻辑字体(LogFont)可以使用 CreateFont 或
CreateFontIndirect 这两个Windows API函数来定义任何想要的字体,由于 CreateFont
所需的参数甚多通常我们使用 CreateFontIndirect 来建立所需的逻辑字体,这个API函数
在Delphi中的声明为function CreateFontIndirect(const p1: TLogFont): HFONT;

stdcall;其中只有一个参数 p1: TLogfont, 所有有关字体的参数完全通过这个TLogfont
结构来传送,Windows将根据结构中的内容创建出相应的逻辑字体,在Delphi的Windows.pas
中TLogFont是这样定义的
TLogFontA = packed record
lfHeight: Longint;
lfWidth: Longint;
lfEscapement: Longint;
lfOrientation: Longint;
lfWeight: Longint;
lfItalic: Byte;
lfUnderline: Byte;
lfStrikeOut: Byte;
lfCharSet: Byte;
lfOutPrecision: Byte;
lfClipPrecision: Byte;
lfQuality: Byte;
lfPitchAndFamily: Byte;
lfFaceName: array[0..LF_FACESIZE - 1] of AnsiChar;
end;

TLogFontW = packed record
lfHeight: Longint;
lfWidth: Longint;
lfEscapement: Longint;
lfOrientation: Longint;
lfWeight: Longint;
lfItalic: Byte;
lfUnderline: Byte;
lfStrikeOut: Byte;
lfCharSet: Byte;
lfOutPrecision: Byte;
lfClipPrecision: Byte;
lfQuality: Byte;
lfPitchAndFamily: Byte;
lfFaceName: array[0..LF_FACESIZE - 1] of WideChar;
end;

TLogFont = TLogFontA;
其中涉及到很多参数,其中
lfHeight: Longint;
指定以逻辑单位标定的字体高度,取值可为正负或零,对于需要随意定义字体高度的情况
下通常取负值,以保证获得实际尺寸的字体。

lfWidth: Longint;
用于指定字体的平均宽度,由于Windows系统下的大多数字体都是比例字体因而采用平均宽
度这个表示方法。若指定为0,则系统会自动根据适当的比例自动处理宽度。

lfEscapement: Longint;
指定输出方向与当前坐标系X轴之间的以十分之一度为单位的角度。

lfOrientation: Longint;
指定每个字符与当前坐标系X轴之间的以十分之一度为单位的角度。在Windows95中这个值
等同于lfEscpement。

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

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

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

lfStrikeOut: Byte;
不为0表示带穿透线。

lfCharSet: Byte;
指定字体集。

lfOutPrecision: Byte;
指定输出精度。用于确定对前面一些设定值的精确程度。

lfClipPrecision: Byte;
指定裁剪精度。裁剪是Windows图形环境下的一种特殊处理,简单说就是去掉图形中落在视
图以外的部分,有助于提高图形的处理速度。

lfQuality: Byte;
指定输出质量。

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

lfFaceName: array[0..LF_FACESIZE - 1] of AnsiChar;
指定采用的字体名称。

在建立逻辑字体时,我们通常使用

lfHeight和lfWidth来确定字体的尺寸,使用lfEscapement和lfOrientation
来确定字体的输出方向,使用lfWeight, lfItalic, lfUnderline,
lfStrikeOut, 来确定字体的加重,斜体,下划线和穿透线,使用lfCharSet
来确定字体的字符集,通常采用系统默认的字符集。
对于lfOutPrecision, lfClipPrecision, lfQuality一般应用于对屏幕之外
的输出设备,通常采用默认值。采用lfPitchAndFamily来确定采用定宽或可
变字体和字体的家族。以lfFaceName来通过名称选择采用的字体。
另外应当注意在Windows环境下,每种字体具体输出为何种形式取决于很多
因素,需要对以上这些参数进行有效的组合才能达到所要的效果。
 
非常感谢posche的解释。只是有点太过复杂。能否再讲简练一些。
再给一个小DEMO那就更好了。
 
如果你嫌太麻烦的话,你还可以自己搞一个bitmap,然有在上面画东西,要多小有多小
 
多人接受答案了。
 
后退
顶部