Ориентация шрифта в TDirect2DCanvas не работает? - PullRequest
1 голос
/ 06 июня 2019

Мне нужно нарисовать угловой текст на 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;

Независимо от того, какой угол я даю для ориентации, он всегда рисует прямой текст. Ориентация не работает или мне нужно сделать что-то еще?

1 Ответ

1 голос
/ 07 июня 2019

Установка TDirect2DCanvas.Font.Orientation не имеет никакого эффекта (скорее всего, не реализована, извините, нет времени на отладку).Оболочка Direct2D, поставляемая в Delphi, очень проста.

Чтобы достичь своей цели, примените преобразование вручную:

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;

Для получения более подробной информации / эффектов вы можете посмотреть: Рисунок текстаИспользование IDWriteTextLayout.Draw () Вся категория Direct2D на том же сайте также интересна (используйте Google Translate).

...