Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi TDirect2DCanvas中的字体方向不工作?_Delphi_Orientation_Direct2d - Fatal编程技术网

Delphi 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

我需要在TDirect2DCanvas上绘制有角度的文本,但没有成功

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,有关详细信息,请参阅