如何在DELPHI中输出长体字或扁体字?(100分)

  • 主题发起人 主题发起人 Mischa
  • 开始时间 开始时间
M

Mischa

Unregistered / Unconfirmed
GUEST, unregistred user!
各位仁兄:
小弟在给一个客户写工资程序,客户原先是用DOS下FOXPLUS的。他喜欢上了DOS风格。
大家都知道UCDOS的特殊打印功能,能输出长体字或扁体字。因为输出的工资项目太长(这
是“国情”,没有办法,发工资给员工嘛!在钱柜里抓一把不就得了^_^)需要用长体字输出。

哪位大虾有办法在DELPHI中用PRINTE.CANVAS.TEXTOUT(..)输出长体字?

谢谢!
100分呀!
 
可以这样实现。先将文字画到图象上,然后
控制图象的长宽。
拉长变窄,就成了窄字体。
拉宽变短,就成了长字体。
有点变哟!
 
用 CreateFont 重新定义一种字体,然后 SendMessage 修改要输出的控件的字体就可以了
例如:
var
hFont1: integer;
....
hFont1 := CreateFont(12, 6, 0, 0, 300, 0, 0, 0, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'F1');
....
SendMessage(Label1, WM_SETFONT, hFont1, 0);
//搞定!
 
beta:
能不能再说详细一些,label1是指控件吗?如何打印输出文字?

若你能详细说明,100全给你。
 
用beta的方法没有错,和我联系看看有没有这种例子,我现在还没有找到但死命找估计会有的。
loopy@netease.com
 
声明一下:
我与loopy网友已经通过信,他已给我寄来了邮包,里面有完整的程序。
我试过了。
所以100分我决定给他。以感谢他一上午的劳动。

也感谢特别是BETA等众网友的支持!!!

代码是:

hFont1 := CreateFont(updown1.Position,updown2.position,
updown3.Position*10,0,updown4.Position*100, b, a, c, DEFAULT_CHARSET or GB2312_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'F1');
//参数说明:
// 1 为长度 2 为宽度 3 为倾斜的角度 4为基准的角度 5 为字体的重量也是字体的粗度等
// 6 为斜体标志 7 为有底线的标志,8 为删除线的标志 9为 字符集 10为输出的精度
// 11为剪裁的精度 12为输出的质量 13为字体间距
// 14为指定的字体名称,不能超过32个字
selectobject(label1.Canvas.Handle,hfont1);
//label1.Canvas.TextOut(updown1.Position,updown2.Position,edit4.text);
textout(label1.Canvas.Handle,100,100,PChar(edit1.text),Length(edit1.text));
后我只要加入
selectobject(printer.canvas.handle,hfont1);
就可以在打印机上输出了。

再次谢谢BETA和LOOPY众网友支持。





 
接受答案了.
 

各位:
最近看了一些书,发现还有更方便的方法,不敢贪污,寄给大家。
当然,各位先进可能早就知道了。

用CreateFontIndect()函数。


在FORM上建一个钮,然后在ONCLICK事件上加入:
var lf:TLogFont;
tf:Tfont;
begin

with form1.Canvasdo

begin

font.name := 'ºÚÌå';
font.Size := 24;
tf:= Tfont.Create ;
tf.Assign(Font);
GetObject(tf.handle,sizeof(lf),@lf);
lf.lfHeight := 100;
lf.lfWidth := 12;
tf.Handle := CreateFontIndirect(lf);
font.Assign(tf);
tf.free;
textout(100,100,'长体字');
end;


end;

其中TlogFont结构如下:(具体可以看SDK帮助)
typedef struct tagLOGFONT { // lf
LONG lfHeight;

LONG lfWidth;

LONG lfEscapement;

LONG lfOrientation;

LONG lfWeight;

BYTE lfItalic;

BYTE lfUnderline;

BYTE lfStrikeOut;

BYTE lfCharSet;

BYTE lfOutPrecision;

BYTE lfClipPrecision;

BYTE lfQuality;

BYTE lfPitchAndFamily;

TCHAR lfFaceName[LF_FACESIZE];

} LOGFONT;


其意义同CreateFont相同,上次LOOPY网友已说过了。

这样非直接建立字体的好处是可以不必为每一个特性赋值。
只要修改自己想要改的属性即可。比较方便简洁。

多联系。

翔宇/Mischa
Mischa@citiz.net
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部