关于FONT的字型瘦高或矮胖问题(100分)

  • 主题发起人 主题发起人 wwwwww
  • 开始时间 开始时间
W

wwwwww

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾!你们好!
众所周知,在DOS的UCDOS中,打印字型可方便地用`@32,48=2`控制,
而在WINDOW中,用:
CANVAS.FONT.HEIGHT:=32;
CANVAS.FONT.WIDTH:=48;无疑是错的
只能用CANVAS.FONT.SZIE:=30 打印方字。
那该怎么办呢?
不要对该问题不屑一顾!
THANK YOU VERY MUCH!
 
请用Win API中的CreateFont 函数.
 
改变Font需要建立一个LogFont:
可以查Win32 API help中的CreateFont,LogFont
procedure TForm1.MyTextOut(str:String);
var
logFont:TFont;
LogRec: TLOGFONT;
OldFont,
NewFont: HFONT;
begin
LogRec.lfheight:=MulDiv(32, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 72);
logRec.lfwidth:=MulDiv(48, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 72);
LogRec.lfFaceName := '宋体';
LogRec.lfCharset:=GB2312_CHARSET;
logRec.lfEscapement:=0;
logRec.lfUnderLine:=0;
logRec.lfItalic:=0;
logRec.lfStrikeOut:=0;
NewFont := CreateFontIndirect(LogRec);
OldFont := SelectObject(Canvas.Handle,NewFont);
Canvas.TextOut(10, 240, '宋体Abc太阳!');
NewFont := SelectObject(Canvas.Font.Handle,OldFont);
DeleteObject(NewFont);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
LogRec: TLOGFONT;
OldFont, NewFont: HFONT;
begin
GetObject(Canvas.Font.Handle, SizeOf(LogRec), @LogRec);//Get the current LogicFont setting
with LogRecdo
begin
lfWidth := Round(lfHeight*1.5);//wideth =1.5 height
end;
NewFont := CreateFontIndirect(LogRec);//Create a font object
OldFont := SelectObject(Canvas.Handle,NewFont);//use the logicfont
Canvas.TextOut(10,10,'Hello 6W');//draw text
NewFont:=SelectObject(Canvas.Handle, OldFont);//restore the old font
DeleteObject(NewFont);//release the system resource
end;
 
感谢几位大力协助,送上几十分,小小薄礼,不好意思!
 
Hi 5w,
How to split the points?
 
应该是6w,加上我不就每人25分了?
 
多人接受答案了。
 
后退
顶部