如何使字体变窄 ( 积分: 100 )

  • 主题发起人 主题发起人 zwwhb
  • 开始时间 开始时间
Z

zwwhb

Unregistered / Unconfirmed
GUEST, unregistred user!
客户现在有一要求,要字体大小不变,高度不变,但字体宽度必须为以前的60%,请问各位富翁如何实现?
 
不太记得了,好像在VC++编程内幕里作者用了专门的一章来写这个,推荐楼主看一下.
 
以前写的代码,自定义三种字体,字体宽高,由自己决定
procedure MakeFont(var FHFont:HFont;FontName:string;FType:byte);
var
FLogFont: TLogFont;
begin
FillChar(FLogFont, sizeof(TLogFont), 0);
with FLogFont do
begin
case Ftype of
1:begin
lfHeight := 33;//大字体
lfWidth := 38;
end;
2:begin
lfHeight := 20;//小字体
lfWidth := 12;
end;
3:begin
lfHeight := 30;//大字体
lfWidth := 25;
end;
end;
lfEscapement := 0;
lfOrientation := 0;
lfWeight := 0;
lfItalic := 0;
lfUnderline := 0;
lfStrikeOut := 0;
lfCharSet := DEFAULT_CHARSET;
lfOutPrecision := OUT_DEFAULT_PRECIS;
lfClipPrecision := CLIP_DEFAULT_PRECIS;
lfQuality := 0;
lfPitchAndFamily := DEFAULT_PITCH or FF_DONTCARE;
StrPCopy(lfFaceName, FontName);
end;
FHFont := CreateFontIndirect(FLogFont);
end;

调用:
var

BigFont:HFont;

MakeFont(BigFont,'宋体',1);
Canvas.handle:=BigFont;
 
to redsky.l,
不好意思,我对windows底层不太熟悉,还是没搞明白,这样定义之后,如何让这种字体应用于标签lable?
 
procedure TForm2.Button1Click(Sender: TObject);
var
FLogFont:TagLOGFONTA;//逻辑字体一结构体类型
hTempFont:HFont;
hPrevFont:HFont;//字体句柄
hTempDC:HDC;//设备描述表或图形设备句柄
TempString:string;//输出的文字
begin
FLogFont.lfHeight:=100;//字高
FLogFont.lfWidth:=20;//字宽
FLogFont.lfWeight:=1;//字体笔划粗细程度
FLogFont.lfUnderline:=0;//没有下划线
FLogFont.lfStrikeOut:=0;//没有删除线 .
FLogFont.lfItalic:=0;//斜体效果否
FLogFont.lfCharSet:=GB2312_CharSet;//字符集
FLogfont.lfEscapement:=450;//倾斜度
FLogFont.lfOrientation:=450;//方向与倾斜度取值同
FLogFont.lfFacename:='宋体';//字体名称
//创建逻辑字体
hTempFont:=CreateFontIndirect(FLogFont);
TempString:='测试';
//取得窗口的设备句柄
hTempDC:=GetDC(Handle);//取出窗口设备的当前字体,并替换为新字体
hPrevFont:=SelectObject(hTempDC,hTempFont);//设置设备窗口的文字色彩
SetTextColor(hTempDc,0);//输出文字
TextOut(hTempDc,200,200,PChar(TempString),Length(TempString));//恢复原有的字体
SelectObject(hTempDc,hPrevFont);//删除逻辑字体
DeleteObject(hTempFont);//释放设备接口
ReleaseDC(Handle,hTempDC);

end;
 
那如何获取所选文字的lfwidth呢?因为我要取得所选文字的宽度的60%作为新字体的宽度
 
别把这里当msdn
 
楼上的,你不愿意回答就算了,总不能阻止别的人吧。
现在字体变窄的预览效果已经达到了,但是预览效果和打印效果不一致。打印的字体比较小。其中部分代码如下:

procedure DoDrawText(var Rect: TRect;Flags: Longint);
var
Text: string;
begin
lf.lfWidth:=labfield.ffontwidth;
if fsBold in labfield.Font.Style then
lf.lfWeight:=FW_BOLD
else
lf.lfWeight:=FW_NORMAL;
if fsItalic in labfield.Font.Style then
lf.lfItalic:=1
else
lf.lfItalic:=0;
if fsUnderline in labfield.Font.Style then
lf.lfUnderline:=1
else
lf.lfUnderline:=0;
if fsStrikeOut in labfield.Font.Style then
lf.lfStrikeOut:=1
else
lf.lfStrikeOut:=0;
lf.lfCharSet := labfield.Font.Charset;
Hft:=CreateFontIndirect(lf);
Canvas.Font := Font;
Text := Memo;
if Text='' then Text:=' ';

if (Flags and DT_CALCRECT <> 0) and ((Text = '') and
(Text[1] = '&') and (Text[2] = #0)) then Text := Text + ' ';
DrawText(Canvas.Handle, PChar(Text), Length(Text), Rect, Flags);
DeleteObject(hft);
end;
labfield.ffontwidth为我保存的字体宽度的大小
 
客户的这种要求真是很刁钻,字体和大小都由前人规定好了,非要去改人家原有的字体.
我没这种本事...
 
都没人回答吗?为什么打印的旋转字体都能实现,扁体字却不能实现呢?
 
如果你想花最少的钱学习流行的计算机技术,本人低价提供
计算机专业高清晰 视 频 教 程,所有教程由业内名家讲解,物超所值,
所有光盘4元/张,特快专递全国三天内到货.
联系方式:手 机:1 3 5 76145612(手机联系佳) Q Q:108410943
E-mail:ncncldjjg@126.com
1、Oracle9iOCP(Oracle认证专家DBA)视频教程(23CD)
2、SQL语言、数据挖掘、SQLServer2000视频教程(6CD)
3、计算机网络原理视频教程(4CD)
4、计算机实用组网技术视频教程(3CD)
5、MCSE(微软认证系统工程师)认证视频教程(11CD)
6、windows2003即学即会视频教程(6CD)
7、J2EE Web程序开发定向班/Java就业班视频教程
(java基础jsp核心技术UML设计)(13CD)
8、J2EE基础高级案例分析视频教程(9CD)
9、马士兵J2SE入门与精通(含坦克大战、BBS实例)视频教程(6CD)
10、java语言深入详解视频教程(12CD)
11、java技术从入门到精通视频教程(21CD)
12、javascript全接触视频教程(13CD)
13、各类网站源程序(9CD)
14、unix原理视频教程(3CD)
15、Linux软件开发工程师(C语言)视频教程(4CD)
16、Linux配置、管理、优化实战工程师视频教程(8CD)
17、Linux内核编程视频教程(11CD)
18、C语言详解视频教程(2CD)
19、VC++6.0(MFC)开发技术术详解视频教程(6CD)
20、ASP.NET中文视频教程(3CD)
21、洪恩C#入门多媒体教程(1CD)
22、XML技术视频教程(2CD)
23、操作系统视频教程(3CD)
24、网络技术基础视频教程(2CD)
25、数据结构视频教程(5CD)
26、清华大学计算机专业多媒体教程(数据结构、汇编、编译原理等)(13CD)
27、大学数学[离散数学线性代数概率与数理统计微积分]视频教程(22CD)
28、LearnKey Asp.Net (老外用英语讲课)(13CD)
29、LearnKey Asp.Net Webservice(老外用英语讲课)(5CD)
30、AppDev Asp.Net2.0 UsingC# (老外用英语讲课)(1CD)
31、APPDev .Net Framework(老外用英语讲课)(2CD)
32、林清安pro/e2001(野火版)视频教程(18CD)
33、深圳大学3D设计视频教程(4CD)
34、3DMAX建模视频教程(老外用英语讲课)(6CD)
35、3DMAX纹理与贴图材质灯光视频教程(老外用英语讲课)(5CD)
36、3DMAX格式500个常用模型库(4CD)
37、lightscape基础入门视频教程(2CD)
38、聚光制造(lightscape3.2入门与精通视频教程)(4CD)
39、coreldraw12中文版入门与精通swf格式视频教程(2CD)
 
后退
顶部