Delphi 方向为垂直时,无法对齐画布上的右文本
我正在使用WinAPIDrawText在矩形内写入画布。我必须水平和垂直地写文本。使用uFormat常量设置文本对齐方式。 我无法让它将垂直文本与矩形顶部对齐。见图片 这是我用来画文本的代码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
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调用可以更好地对齐。