我想使用Canvas.TextRect
在画布上写一些具有90度角度和自动换行功能的东西。我还希望文本在矩形中垂直对齐。我该怎么做?
发布于 2009-10-29 13:57:30
下面是创建垂直字体的示例代码:
function MakeVerticalFont(f: TFont): TFont;
var
lf : TLogFont;
tf : TFont;
begin
tf := TFont.Create;
tf.Assign( f );
GetObject(tf.Handle, sizeof(lf), @lf);
lf.lfEscapement := 900; // <--
lf.lfOrientation := 900; // <-- here we specify a rotation angle
tf.Handle := CreateFontIndirect(lf);
result := tf;
end;
[...]
var tf: TFont;
Begin
...
tf := MakeVerticalFont( mycanvas.Font );
mycanvas.Font.Assign( tf ); // <--- assign the `same` font rotated by 90 degrees
...
更新:尝试在表单上呈现竖排文本:
var tf : TFont;
tmpcanvas : TCanvas;
begin
tmpcanvas := form1.Canvas;
tmpcanvas.Font.Name := 'Arial';
tmpcanvas.Font.Height := 12;
tf := MakeVerticalFont(tmpcanvas.font);
tmpcanvas.Font.Assign(tf);
tmpcanvas.TextOut(50, 50, 'Am I vertical?');
tf.free;
更新2:我认为最好使用支持文本对齐和自动换行的DrawTextEx Function。
我的Delphi版本没有在文档中包含它,但是您可以在上面的链接中看到各种标志。下面是一个示例代码,看看如何使用它。我禁用了垂直字体,因为似乎垂直字体不能很好地自动换行。
procedure TForm1.Button1Click(Sender: TObject);
var tf : TFont;
tmpcanvas : TCanvas;
rc: TRect;
s : string;
begin
tmpcanvas := form1.Canvas;
tmpcanvas.Font.Name := 'Arial';
tmpcanvas.Font.Height := 14;
tf := MakeVerticalFont(tmpcanvas.font);
//tmpcanvas.Font.Assign(tf); <--- `disabled`
s := 'Hello world! I''m a long string';
rc := RECT(10, 10, 50, 200);
windows.DrawTextEx(
tmpcanvas.Handle,
PChar(s),
length(s),
rc,
DT_LEFT or DT_WORDBREAK,
nil);
tf.Free;
end;
请注意,当您想要对齐矩形中的文本时,应该使用DT_SINGLELINE
标志。
例如,这个组合:DT_CENTER or DT_VCENTER or DT_SINGLELINE
,将使文本居中于矩形的中间。
发布于 2009-10-29 15:38:18
在Delphi2006及以后的版本中,TFont有一个方向属性。不幸的是,帮助没有更新到包含它(就像很多D2006帮助一样)。
Delphi 2010 help is here
它是以度为单位的,所以设置为90度,使用900。
Canvas.Font.Orientation := 900;
Canvas.TextRect(....);
然后,您还需要根据需要调整矩形坐标。
我以前用过这个,但记不住细节了。
https://stackoverflow.com/questions/1641803
复制相似问题