旋转字体的问题!(100分)

  • 主题发起人 主题发起人 cxfirefox
  • 开始时间 开始时间
C

cxfirefox

Unregistered / Unconfirmed
GUEST, unregistred user!
请看下面这个程序能不能以angle角度来旋转字体!
procedure AngleTextOut(CV: TCanvas; const sText: String; x, y, angle:integer);
var
LogFont: TLogFont;
SaveFont: TFont;

begin
SaveFont := TFont.Create;
SaveFont.Assign(CV.Font);
GetObject(SaveFont.Handle, sizeof(TLogFont), @LogFont);
with LogFont do
begin
lfEscapement := angle *10;
lfPitchAndFamily := FIXED_PITCH or FF_DONTCARE;
end; {with}
CV.Font.Handle := CreateFontIndirect(LogFont);
SetBkMode(CV.Handle, TRANSPARENT);
CV.TextOut(x, y, sText);
CV.Font.Assign(SaveFont);
SaveFont.Free;
end;
 
没问题呀?
我的代码:
angletextout(self.Canvas,'sdfsd',100,100,90);
angletextout(self.Canvas,'测试',300,100,90);
在xpsp1+d7下通过。
 
procedure TForm1.Button1Click(Sender: TObject);
begin
angletextout(self.Canvas,'sdfsd',100,100,45);
angletextout(self.Canvas,'测试',300,100,135);
end;

angle只能是90的整数倍数。
 
不对吧?我这里这样也行!
angletextout(self.Canvas,'sdfsd',100,100,5);
angletextout(self.Canvas,'测试',300,100,10);
 
我是Win98 + D5。
 
你说的对,我试了一下,确实如此.查资料,98对这个函数支持不好。
 
lfEscapement := angle *10;//
lfEscapement:指定输出方向与当前坐标X轴之间的以十分之一度为单位的角度。
所以*10之后刚好是以度为单位的角度,我在W2K+D7下试了没问题。
 
我在winXP下,怎么尝试都不行,win98下却可以任意角度旋转
 
问题不在于是否xp,98,而是你需要选择合适的字体: 必须是 True Type 的,否则就只能转90的整数倍

比如,你把form1的字体设置为 '宋体',则不管你是否xp,98,都可以转任意角度了
 
后退
顶部