2

Canvas.TextRect90度の角度とワードラップ機能を備えたキャンバスに何かを書きたいと思っています。また、テキストを長方形内で垂直方向に揃えたいと考えています。それ、どうやったら出来るの?

4

2 に答える 2

4

縦書きフォントを作成するサンプルコードは次のとおりです。

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 関数を使用する方がよいと思います。

私の 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-29T05:57:30.423 に答える
4

Delphi 2006 以降では、TFont の Orientation プロパティがあります。残念ながら、ヘルプはそれを含むように更新されていません (D2006 ヘルプの多くのように)。

Delphi 2010 ヘルプはこちら

10 分の 1 度なので、90 度に設定し、900 を使用します。

Canvas.Font.Orientation := 900;
Canvas.TextRect(....);

また、必要に応じて長方形の座標を調整する必要があります。

過去に使用したことがありますが、詳細を思い出せません。

于 2009-10-29T07:38:18.463 に答える