首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >delphi textrect,具有角度和自动换行功能,并垂直对齐

delphi textrect,具有角度和自动换行功能,并垂直对齐
EN

Stack Overflow用户
提问于 2009-10-29 13:46:11
回答 2查看 8.1K关注 0票数 2

我想使用Canvas.TextRect在画布上写一些具有90度角度和自动换行功能的东西。我还希望文本在矩形中垂直对齐。我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-29 13:57:30

下面是创建垂直字体的示例代码:

代码语言:javascript
运行
复制
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
   ...

更新:尝试在表单上呈现竖排文本:

代码语言:javascript
运行
复制
    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版本没有在文档中包含它,但是您可以在上面的链接中看到各种标志。下面是一个示例代码,看看如何使用它。我禁用了垂直字体,因为似乎垂直字体不能很好地自动换行。

代码语言:javascript
运行
复制
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,将使文本居中于矩形的中间。

票数 4
EN

Stack Overflow用户

发布于 2009-10-29 15:38:18

在Delphi2006及以后的版本中,TFont有一个方向属性。不幸的是,帮助没有更新到包含它(就像很多D2006帮助一样)。

Delphi 2010 help is here

它是以度为单位的,所以设置为90度,使用900。

代码语言:javascript
运行
复制
Canvas.Font.Orientation := 900;
Canvas.TextRect(....);

然后,您还需要根据需要调整矩形坐标。

我以前用过这个,但记不住细节了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1641803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档