Delphi 方向为垂直时,无法对齐画布上的右文本

Delphi 方向为垂直时,无法对齐画布上的右文本,delphi,winapi,Delphi,Winapi,我正在使用WinAPIDrawText在矩形内写入画布。我必须水平和垂直地写文本。使用uFormat常量设置文本对齐方式。 我无法让它将垂直文本与矩形顶部对齐。见图片 这是我用来画文本的代码 procedure SetOrientation(pIndex: Integer); var j: Integer; begin f := 0; j := fPinCount div 4; if pindex < j then begin fBuffe

我正在使用WinAPIDrawText在矩形内写入画布。我必须水平和垂直地写文本。使用uFormat常量设置文本对齐方式。 我无法让它将垂直文本与矩形顶部对齐。见图片

这是我用来画文本的代码

  procedure SetOrientation(pIndex: Integer);
  var j: Integer;
  begin
    f := 0;
    j := fPinCount div 4;
    if pindex < j then begin
      fBuffer.Canvas.font.orientation := 0 ;
      f := DT_RIGHT
     end else
     if pIndex < 2 * j then begin
       fBuffer.Canvas.font.Orientation := 900 ;
       f := DT_TOP
      end else
      if pIndex < 3 * j then begin
        fBuffer.Canvas.font.orientation := 0;
        f := DT_LEFT
      end else begin
      fBuffer.Canvas.font.Orientation := 900;
        f := DT_LEFT;
    f := f or DT_SINGLELINE or DT_NOCLIP;
  end;

    SetOrientation(i);
    DrawText(FBuffer.Canvas.Handle, s, Length(s), PinDscRects[i], f);
    fBuffer.Canvas.Font.Orientation := 0;
过程设置方向(pIndex:Integer);
var j:整数;
开始
f:=0;
j:=fPinCount div 4;
如果pindex
我已经尝试了uFormat的所有值,但是没有一个值能够证明垂直文本的合理性。您能推荐一种替代方法吗?

是一种非常古老的图形API,有时这是非常明显的。有人可能会说,这就是其中之一

然而,克服这一限制并不困难。例如,你可以

程序TForm1.FormPaint(发送方:TObject);
常数
S=‘纳格尔狗很可爱!’;
开始
Canvas.Font.Orientation:=900;
变量R:=ClientRect;
偏移量(R,0,Canvas.TextWidth);
DrawText(Canvas.Handle、PChar(S)、S.Length、R、DT_单线或DT_NOCLIP);
结束;
或者(因为我认为
DT_NOCLIP
部分有点难看)

程序TForm1.FormPaint(发送方:TObject);
常数
S=‘纳格尔狗很可爱!’;
开始
Canvas.Font.Orientation:=900;
TextOut(Canvas.Handle、0、Canvas.TextWidth、PChar、S.Length);
结束;

如您所见,我只需通过文本的逻辑(以像素为单位)转换传递给文本绘制函数的垂直空间坐标。

现在,在确定起点后,使用TextOut API调用可以更好地对齐。