Delphi TDirect2DCanvas中的字体方向不工作?
我需要在TDirect2DCanvas上绘制有角度的文本,但没有成功Delphi TDirect2DCanvas中的字体方向不工作?,delphi,orientation,direct2d,Delphi,Orientation,Direct2d,我需要在TDirect2DCanvas上绘制有角度的文本,但没有成功 procedure TForm1.FormPaint(Sender: TObject); var LCanvas: TDirect2DCanvas; const myText = 'Kikimor'; begin LCanvas := TDirect2DCanvas.Create(Canvas, ClientRect); LCanvas.BeginDraw; try LCanvas.Font
procedure TForm1.FormPaint(Sender: TObject);
var
LCanvas: TDirect2DCanvas;
const
myText = 'Kikimor';
begin
LCanvas := TDirect2DCanvas.Create(Canvas, ClientRect);
LCanvas.BeginDraw;
try
LCanvas.Font.Orientation := 90;
LCanvas.TextOut(100,100,myText);
finally
LCanvas.EndDraw;
LCanvas.Free;
end;
end;
无论我以什么角度来定位,它总是画出一条直线。
方向不起作用还是我需要做其他事情?设置TDirect2DCanvas.Font.orientation没有任何效果(很可能没有实现,抱歉,没有时间调试)。Delphi中提供的Direct2D包装器非常基本 要实现您的目标,请手动应用转换:
procedure TForm1.FormPaint(Sender: TObject);
var
LCanvas: TDirect2DCanvas;
currentTransform: TD2D1Matrix3x2F;
ptf: TD2DPoint2f;
const
myText = 'Kikimor';
begin
LCanvas := TDirect2DCanvas.Create(self.Canvas, ClientRect);
LCanvas.BeginDraw;
try
// backup the current transformation
LCanvas.RenderTarget.GetTransform(currentTransform);
ptf.x:= 100.0; ptf.y:= 100.0; //rotation center point
// apply transformation to rotate text at 90 degrees:
LCanvas.RenderTarget.SetTransform(TD2D1Matrix3x2F.Rotation(90, ptf));
// draw the text (rotated)
LCanvas.TextOut(100, 100, myText);
// restore the original transform
LCanvas.RenderTarget.SetTransform(currentTransform);
finally
LCanvas.EndDraw;
LCanvas.Free;
end;
end;
有关更广泛的信息/效果,您可以查看:
在同一个站点上的整个类别也很有趣(使用谷歌翻译)。对于使用C++ Builder的那些作者, < P>我让它起作用:
#包括
//D2D1::Matrix3x2F::旋转变换需要
#ifdef_WIN64
#pragma注释(lib,“D2D1.a”)
#否则
#pragma注释(lib,“D2D1.lib”)
#恩迪夫
TD2DPoint2f点;//旋转中心
点x=100.0;
点y=100.0;
画布2d->RenderTarget->SetTransform(D2D1::Matrix3x2F::旋转(90,点));
画布二维->文本输出(100,100,文本);
//之后恢复0旋转
画布2d->RenderTarget->SetTransform(D2D1::Matrix3x2F::旋转(0,点));
请注意,在Delphi版本中尝试使用GetTransform会导致异常,因此我通过传递一个带有零旋转的新转换来清除该转换,可能有更好的方法
由于链接错误,需要使用pragma,有关详细信息,请参阅